2011-10-11 3 views
4

私はIsOneWay = true +コールバックインターフェイス経由でアクセスする必要がある機能を実装するWCF Webサービス(自分の管理下ではありません)を持っています処理完了を通知する。 GUIからのアクセス用に設計されたので、この方法で記述されています。C#コンソールアプリケーションで一方向WCF呼び出しの完了を待っています

ただし、コンソールアプリケーションからこの同じメソッドにアクセスして、バッチで使用する必要があります。現在、これを達成するための私の粗末な方法は、フラグをfalseに設定し、WCFメソッドを呼び出した後、短いThread.Sleep()呼び出しでwhileループを実装します。これは明らかに機能しますが、最終的な結果を達成するための本当に貧弱な方法のようです。

私はこれを行う正しい方法が何であるか知りたいと思います。注:コードの実装などを簡単にノックアップすることはできますが、サービスは自分のコントロールから外れており、参照はIDE経由で追加されました。

答えて

4

完了を待つためにはManualResetEventを使用してください。サービス上で一方向非同期メソッドを呼び出してから、manualreseteventオブジェクトを待ちます。

var waitHandle = new ManualResetEvent(); 

yourwcfObject.CallTheOneWayMethod(); 
waitHandle.WaitOne(); 


void CallbackMethodRaisedByWCFService() 
{ 
    waitHandle.Set(); 
} 
+2

@anonymouse::そして(HTTP [ 'ManualResetEvent.WaitOne'のオーバーロード]を見て、あなたのコールバックでは、あなたのメインスレッドはWAITONE(後に実行を継続できるようになるセット()メソッド)ので、のような呼び出しを呼び出します。 //msdn.microsoft.com/de-de/library/57deze2z.aspx)。エラーが発生した場合にアプリケーションが永遠に待機しないように、タイムアウトを設定することもできます。 – Stephan

関連する問題