コールバック/デュプレックス通信チャネルを閉じる問題/質問があります。私は、取得するためにWCFコールバックインターフェイス - チャネルを閉じる人
OperationContext.Current.GetCallbackChannel<IMyInterfaceCallback>();
を使用して、サーバー側で
DuplexChannelFactory<IMyInterface> dcf = new DuplexChannelFactory<IMyInterface>(implOfIMyInterfaceCallback, customBinding, ea);
IMyInterface myInterface = dcf.CreateChannel();
:私は介して、私のWCFインターフェイスを作成し、クライアント側で
[ServiceContract(CallbackContract = typeof(IMyInterfaceCallback))]
public interface IMyInterface
{
[OperationContract]
void StartWork();
}
public interface IMyInterfaceCallback
{
[OperationContract(IsOneWay = true)]
void WorkFeedback();
}
:ここに は私のプロトタイプのWCFインターフェイスですコールバックポインタは、クライアントとの通信に使用できます。
私の質問は次のようになります。
- 通信チャネルを閉じる必要があります誰ですか?クライアントまたはサーバー
- どの通信オブジェクトを閉じる必要がありますか?元のインターフェイス(IMyInterface)またはコールバックインターフェイス(IMyInterfaceCallback)またはその両方。
サーバー側でコールバックインターフェイスを閉じようとしましたが、サーバーがそれ以上コールバックを実行しないことがわかっているときに、 しかし、コールバックインターフェイスでICommunicationObject :: Closeを使用すると、1分のブロック操作が発生しました。
私の考えでは、クライアントサイドで閉じることは適切な方法ではありません。クライアントは、さらに多くのコールバックがあるかどうかわからないためです。
ありがとうございました。 フランク
PS: DuplexChannelは、ボンネットの下にTCP接続を使用していますこれは非常に基本的な質問のようですが、Googleを介して、またはstackoverflowの中で検索するときに、これまで私は有益な情報を発見した...
情報をいただきありがとうございます。私は現在、クライアント側のチャンネルを閉鎖しています。しかし、閉鎖する前に状態をチェックしています。 Faultedの場合はAbort()を直接呼び出します。しかし、クローズコードもうまくいくはずです。 – FrankE