2010-07-22 8 views
2

.Net 3.5 svcutil.exe 도구로 웹 서비스 프록시 개체 집합을 생성했습니다. 비누 본문 요소에는 2 개의 외부 xml 네임 스페이스 별칭 선언이 있습니다. 특히 스키마 및 스키마 인스턴스 네임 스페이스 (http://www.w3.org/2001/XMLSchema, http://www.w3.org/2001/XMLSchema-instance)외부 wcf 본문 xml 네임 스페이스 선언

다른 이유로, 내가 상호 작용하고있는 서비스에는 이러한 선언을 포함 할 수없는 버그가 있습니다. 나는 그 (것)들을 제거하는 방법 파악하는 것을 시도하고있다. 어떤 도움을 주시면 감사하겠습니다. 비누 메시지는 다음과 같이 보입니다.

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    ... 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     ... 
    </s:Body> 
</s:Envelope> 

답변

4

해결책은 메시지 검사자를 구현하는 것이 었습니다. IClientMessageInspector를 구현하는 클래스를 만들었습니다. 이 클래스는 메시지가 유선으로 전송되기 전에 메시지를 수정하거나 유선에서 벗어난 후 응답을 수정할 수있는 기회를 얻습니다. 그런 다음 사용자 지정 메시지 관리자를 등록하는 데 사용하는 다른 클래스 인 IEndpointBehavior를 만듭니다. 마지막으로 BehaviorExtensionElement를 확장하는 클래스를 만들어 구성 파일에서 사용자 지정 동작을 지정할 수 있도록합니다.

이 솔루션을 사용하면 서버로 전송되는 메시지를 수정하고 문제가되는 xsi 및 xsd 별칭 정의를 제거 할 수 있습니다.

0

SOAP 메시지를 직접 작성하는 방법이 부족하다고 생각합니다. 그것들은 단지 일반적인 XML 스키마 네임 스페이스이며 사용되지 않는다면 정말 피해가 없습니다.

+0

그래, 서비스 제공 업체에서 코드 수정을 위해 노력하고 있지만이를 제어 할 권한이 없습니다. 나는 그것을 만들기 위해 손을 고려하고 있지만, WCF의 유연성, 생성 된 코드 및 기능을 모두 잃어 버릴 것입니다. –