Webサービスを呼び出すために必要なSilverlightクライアントがあります。 WebサービスはJavaで構築され、XOPエンコーディングを使用してバイナリメッセージをその呼び出しの一部に添付します。ただし、Silverlightサービスは、バイナリエンコーディングを含まない呼び出しのみを使用します。しかし、私はWebサービスを制御することができないので、XOPのマルチパートメッセージ(以下に例を挙げます)を扱う必要があります。 WebサービスからSilverlight 3のWSレスポンスから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メッセージを作成し、要求をポストし、文字列として応答をダウンロードするためにWebクライアントクラスを使用します。私たちは、手動でデータをXMLとして解析することに固執しています。これは問題ありませんが、少し難しく、とにかくRESTサービスを利用できます。サービスプロキシがオブジェクトで応答するのが本当に好きです。
私が実際にやってみたいのは、WSスタックがSOAPを逆シリアル化してXOPの塊を削除しようとする前に、メッセージを傍受するカスタム動作を実装することですが、これまでのところ私は何もできないそんなこと。
はJavaサービスへの要求を再送信するサーバー上のプロキシサービスを(私がコントロールすること)を作成し、実際にXOPを扱うことができます。
私はそれを見る方法、私はいくつかのオプションを持っています。このオプションは、私が避けたい性能上の意味合いを持っています。
XOPを処理するカスタムMessageEncodingBindingElement、MessageEncoderFactory、およびMessageEncoderを実装します。このオプションは最初は最高のようですが、TextMessageEncoderFactoryやTextMessageEncoder(内部クラスです)を拡張することができないため、基本的にはメッセージ全体をゼロから書き直す必要があります。
そのまま残してください。
私には見えないオプションがありますか?