1

次の 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) を使用しようとしましたが、問題なく動作しているようです。任意の支援、またはガイダンスをいただければ幸いです。

よろしく、スティーブ

4

2 に答える 2

2

Microsoft に連絡し、Yaron Navehの助けを借りて、これがWCF ルーティング サービスの未確認のバグであることが判明しました。問題が発生する理由の詳細については、Yaron が問題を詳しく説明している素敵なブログ記事を公開しています。

http://webservices20.blogspot.com/2011/01/gsoap-and-wcf-routing-services-are-not.html

この問題の解明に協力してくれたすべての人に感謝します!

よろしく、

スティーブ

更新 (2011 年 4 月 3 日): Microsoft は、この問題に対する修正プログラムを発行しました。http://connect.microsoft.com/VisualStudio/feedback/details/640260/wcf-routing-services-creates-wrong-message-when-protocol-bridging-is-used

于 2011-02-17T13:48:55.193 に答える
0

この問題は、着信バインディングと発信バインディングが異なる RPC エンコードされた SOAP メッセージを使用する場合にも発生します。型定義に関連付けられた名前空間参照は、変換中に失われます。名前空間参照を手動で追加するサービス動作拡張を作成しました。これは理想的ではありませんでしたが、バインディングを変更できませんでした。この問題は Microsoft に非公式に報告済みです。

幸運を

于 2011-03-03T16:15:23.990 に答える