2014-12-26 7 views
1

SOAP 서비스에 대한 WSDL 정의가 있고 SvcUtil을 사용하여 * .cs 파일을 성공적으로 생성했습니다.SOAP 웹 서비스 구현

구현 클라이언트는 매우 간단합니다. 생성 된 * .cs에서 필요한 기능을 호출하면됩니다.

구현 서버가 더 복잡해 보입니다. 내가 이해할 수 있도록 생성 된 * .cs에서 인터페이스를 구현 한 다음 웹 서버로 바꾸기 위해 마술을 사용해야합니다.

하지만 새 웹 서버가 필요하지 않습니다. 이미 이미 구현해야하는 SOAP 서비스와 관련이없는 많은 기능을 가진 C#으로 작성된 웹 서버가 있습니다. 나는 다른 웹 서버를 만들고 싶지 않지만 내 SOAP 서비스가 내 기존 응용 프로그램 (서버)의 일부가되기를 바란다. 즉 내 서버가 대답 할 수있다. http://example.com/request1, http://example.com/request2 등을 요청하고이 SOAP 서비스가 단지 http://example.com/request3이되기를 바란다.

HTTP는 이미 내 서버에서 처리하므로 .NET에서 나를 처리 할 필요는 없습니다. 기본적으로 내 서버는 클라이언트 연결을 수락하고 URL을 기반으로 필요한 처리기를 호출 할 수 있습니다. 나는 대략 다음과 같습니다 SOAP 요청에 대한 핸들러가 있습니다

MyResponse HandleSOAPRequest(MyRequest request) 
{ 
    // 1. parse soap message from request.body 
    // 2. process it 
    // 3. generate response, serialize it in SOAP format and return it 
} 

질문은을 - 나는 그것을 할 WSDL 정의 및 .NET 라이브러리를 사용 할 수 있습니까?

현재 XDocument를 사용하여 SOAP 요청을 구문 분석하고 수동으로 필드를 추출하고 간단한 문자열 연결을 사용하여 직렬화합니다. .NET 내장 함수를 사용하여 XML을 직렬화하거나 구문 분석하는 기능은 작동하지 않습니다. 생성 된 * .cs 파일에 정의 된 클래스의 객체에서 응답을 직렬화하려고하면 정의 된 클래스의 객체로 요청을 구문 분석하려고하면 유사하게 XML이 생성됩니다. XML 파서가 다른 형식을 기대하기 때문에 생성 된 * .cs 파일에서 오류가 발생합니다. 이 SoapFormatter 및 XmlSerializer 적용됩니다.

.NET은 클라이언트를 구현할 수 있기 때문에 SOAP 메시지를 구문 분석하고 직렬화하는 데 필요한 모든 것이 이미 구현되어 있음을 의미하므로이 기능을 사용하는 방법을 알아야합니다.

ServiceModel의 documentation은별로 도움이되지 않았습니다.

+0

서버에 대해 더 자세히 말씀해 주시겠습니까? 내가 IIS라고 생각하는 거 맞지? 사실상 IIS에 WebService dll을 배포하고 구성을 사용자 정의하면 완료됩니다. – t3chb0t

+0

@ t3chb0t, IIS가 아니고 C#으로 작성된 자체 서버입니다. – Sdz

+0

@JohnSaunders, 서버를 구현해야합니다. 클라이언트는 테스트 용으로 만 사용합니다 – Sdz

답변

0

가장 쉬운 방법을 통해 서비스를 시작하는 것입니다 ServiceHost :

ServiceHost host = new ServiceHost(typeof(YourService)); 
host.Open(); 

(나는 구성이 app.config에서 올 것이다 아래 링크 된 예제와 같은 코드에서 설정되지 않습니다 여기에 가정.)

How to: Expose a Contract to SOAP and Web Clients

이의 유일한 단점은 응용 프로그램이 관리자 권한으로 실행하거나 이상한 기기 구성이 필요한다는 것이다.

+0

그래서이 방법으로 별도의 웹 서버가 시작됩니까? 그런 다음 웹 서버의 요청을이 새 서버로 리디렉션해야합니다. – Sdz