2011-01-27 4 views
0

웹 서비스를 호출하는 데 필요한 Silverlight 클라이언트가 있습니다. 웹 서비스는 Java로 작성되었으며 XOP 인코딩을 사용하여 이진 메시지를 일부 호출에 첨부합니다. 그러나 Silverlight 서비스는 이진 인코딩을 포함하지 않는 호출 만 사용합니다. 그러나 웹 서비스를 제어 할 수 없기 때문에 XOP 멀티 파트 메시지 (아래 예는 하나의 예)를 처리해야합니다. 웹 서비스에서Silverlight 3의 WS Response에서 XOP Gunk를 제거하십시오.

예 응답

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:890535d9-d11f-4dfb-8393-789e20ea8064"; start="<[email protected]>"; start-info="text/xml" 
Date: Thu, 27 Jan 2011 22:03:09 GMT 
Content-Length: 47247 


--uuid:890535d9-d11f-4dfb-8393-789e20ea8064 
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"; 
Content-Transfer-Encoding: binary 
Content-ID: <[email protected]> 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <ns2:Response xmlns:ns2="http://tempuri.com/"></ns2:Response> 
    </soap:Body> 
</soap:Envelope> 
--uuid:890535d9-d11f-4dfb-8393-789e20ea8064-- 

우리의 현재 구현 수동 문자열 치환을 이용하여 SOAP 메시지를 생성하고 상기 요청을 게시하고 문자열로 응답을 다운로드 웹 클라이언트 클래스를 사용하여 (데이터 아웃 박리). 그런 다음 XML로 데이터를 수동으로 파싱해야합니다. 괜찮습니다.하지만 다소 어려워서 REST 서비스를 사용할 수 있습니다. 서비스 프록시가 객체로 응답하고 싶습니다.

WS Stack이 SOAP을 deserialize하려고 시도하고 XOP gunk를 제거하기 전에 메시지를 가로채는 사용자 정의 동작을 구현하고 싶습니다. 그러나 지금까지는 제가 할 수있는 것을 찾지 못했습니다 그런 것.

  1. 자바 서비스에 요청을 다시 제출하는 서버에 프록시 서비스를 (I 제어 것을) 만들고 실제로 XOP를 처리 할 수 ​​

    내가 볼때, 나는 몇 가지 옵션이 . 이 옵션은 성능에 영향을 미치므로 피하고 싶습니다.

  2. XOP를 처리 할 사용자 지정 MessageEncodingBindingElement, MessageEncoderFactory 및 MessageEncoder를 구현합니다. 이 옵션은 처음에는 최상으로 보이지만 TextMessageEncoderFactory 또는 TextMessageEncoder (내부 클래스)를 확장 할 수 없기 때문에 기본적으로 처음부터 전체 메시지 인코딩을 다시 작성해야합니다 (Microsoft! 대단히 감사합니다!).

  3. 그대로 두십시오.

표시되지 않는 옵션이 있습니까?

답변

0

아니요, 다른 대안은 없습니다.

WebClient.DownloadString() 메서드를 사용하는 패스 - 스루 ashx 프록시를 구현하기로 결정한 다음 SOAP을 구문 분석하여 응답에 연결합니다. 그것은 충분히 유연해야하며 무엇보다도 Silverlight에서 자동 생성 된 프록시 클래스를 사용할 수 있습니다. 그런 다음 끝점에서 내 ashx 프록시를 사용하면 유지 관리가 훨씬 간단 해집니다.