次の WCF プロトコル ブリッジング シナリオがあります。netTcp を使用して要求をサービスに転送するルーティング サービスと通信する basicHttp バインディングを使用する WCF クライアント。
クライアント<-> basicHttpBinding (SOAP 1.1)
<–>ルーター サービス <–> netTcpBinding (SOAP 1.2)
<–>サービス
ルーティング機能は、gSOAP ライブラリを使用してメッセージをサービスに渡す C++ クライアントにサービスを公開するまで、完全に機能します。C++ クライアントがサービスと直接通信する場合、呼び出しは成功します。ただし、Routing Service 経由で通信しようとするとすぐに失敗します。
Service はルーティングされたメッセージを受け取りますが、メッセージを逆シリアル化しようとするとすぐに例外をスローします。サービスから返されるエラー メッセージはSystem.ServiceModel.Dispatcher.NetDispatcherFaultException
、"The formatter threw an exception while trying to deserialize the message…"
この問題は、プロトコル ブリッジングが原因であると思われます。プロトコル ブリッジングを使用しない場合、つまり呼び出しチェーン全体で basicHttp を使用する場合、C++ クライアント (およびメッセージ ルーティング) は期待どおりに動作します。
この問題を解決する方法がわかりません。ルーティング サービスが WCF から WCF への仲介として設計されていることは理解していますが、問題は C++ gSOAP クライアントから発信された呼び出しだけに限定されているようです。問題を再現できるかどうかを確認するために、いくつかの Web サービス テスト ツール (soapUI、soapSonar) を使用しようとしましたが、問題なく動作しているようです。任意の支援、またはガイダンスをいただければ幸いです。
よろしく、スティーブ