2012-04-09 7 views
3

私はWCF実装を持っており、Windowsサービス内でそれをホストします(自己ホスト型)。私はクライアント側でいくつかのイベントをトリガするためにコールバック契約をinorderで使用します。
質問は、クライアントがコールバックイベントを発生させるためにまだ生きているかどうかを確認したり、確認したりする方法です。チェックメカニズムはありますか?私は.NET 3.5を使用します。
ありがとうございます。クライアントがwcfでコールバックのために生きているかどうかを検出する方法は?

答えて

0

組み込みの方法はありません。

クライアントがコールバックを処理できない場合、コールバックチャネルの状態に応じてクライアントコールバックを呼び出そうとすると、サービスがハングするか例外がスローされます。

この問題に対する1つの可能な解決策は、同じ問題にhere

+1

私は優雅にそれを検出したいと思います。私はそれが例外がスローされる依存するようにしたくない。コールバック契約をICommunicationObjectにキャストして、その状態を確認できますか?それは働くだろうか? – Fer

+0

申し訳ありませんが、その答えは分かりません。 –

+0

ありがとう@hugh。 CallbackContractをICommunicationObjectにキャストし、その状態が開いているかどうかを確認します。ちなみに、より良い解決策が提示されます。 – Fer

0

私のアプローチは、(それはもちろんのいずれでもないImplmentedExceptionをスローしません)コールバックインタフェースを実装する「DefaultCallback」クラスを作成し、何もしないことだったです。 そして、あなたはこのようなコードのビットを書くことができます:だから

private IServiceCallBack[] GetCallBack() 
    { 
     var returnValue = new IServiceCallBack[1]; 

     var com = (ICommunicationObject)(returnValue[0] = OperationContext.Current.GetCallbackChannel<IServiceCallBack>()); 

     com.Closing += new EventHandler((object sender, EventArgs e) => 
     { 
      returnValue[0] = new DefaultCallBack(); 
     }); 

     com.Faulted += new EventHandler((object sender, EventArgs e) => 
     { 
      returnValue[0] = new DefaultCallBack(); 
     }); 

     return returnValue; 
    } 

コールバッククライアントが閉じたり、故障した状態にある時はいつでも、それは何もしません準拠したオブジェクトに置き換えられています。

関連する問題