この問題があります。私は2つのWCFサービス - ServiceA
とServiceB
を持っています。どちらのサービスも異なるWindowsサービスのホストであり、net.tcpを介して通信します。クライアントアクセスService A
。 Service A
ではService B
にアクセスします。私が得た問題は、私が二重に通信したいということです。多層WCF二重通信
クライアントがTestA
のメソッドをServiceA
に呼び出そうとしています。このメソッドはのメソッドTestB
を呼び出します。メソッドTestB
は長時間の動作を行い、コールバックをクライアントに返すようにServiceA
にコールバックを戻します。方法TestA
およびTestB
は片道契約です。
私はServiceA
が戻って、クライアントへのコールバックを発生させているポイントを得ることができます。次に、InvalidCastExceptionでクラッシュし、操作コンテキストでコールバックチャネルを取得しようとしました。
IServiceACallback Callback
{
get
{
return OperationContext.Current.GetCallbackChannel<IServiceACallback>();
}
}
私は別のスレッドに属していて、操作コンテキストは単に完了していないためですか? ServiceB
からの別のコールバックからコールバックを実行していないときにコールバックをクライアントに戻すことができるからです。多分いくつかのサービス属性でそれを解決できますか?または、私が使用できる通信パターンがありますか?
アーキテクチャが動作するはずです。あなたのような例外は、通常、部分的なメッセージを受け取ったときに発生します。受信コードが各メッセージの終わりをはっきりと知っていることを確認してください。入力バッファに存在するよりも多くのデータを読み込もうとすると、アンダーフローが発生し、例外が生成されます。 – jdweng
invalidCastExceptionを意味しますか? –
はい、InvalidCastExceptionです。 – benderto