2011-02-04 12 views
2

私は、WCFサービスまたはおそらくメッセージキューに接続する.NETクライアントアプリケーションがあるとします。プログラムが正常に実行されている間は、接続が失われている可能性があります。または、ユーザーが管理者によって強制的にログオフされている可能性があります。または、管理者が別のWCFサーバー(たとえば、手動ロードバランシングの形式)。多くの低レベルのメソッドの絆のいずれかがWCF呼び出しを行うために、それが失敗した場合にのみ、このことについて知っているだろう接続の切断に反応する

クライアントアプリケーション。

このようなことが起きたとき、私はアプリケーションとそのすべてのウィンドウを何らかの形で無効にする/隠す、ダイアログボックス/スプラッシュウィンドウを表示して再接続を行い、一度正常に終了するとウィンドウが再び表示されるようにします。

どのようにして、これを行うのでしょうか?私が見ている問題は、問題が最も低いレベルにあることが最初に判明したコードです(つまり、メインウィンドウの上にあるダイアログウィンドウのボタンをクリックした結果として)。必要な並べ替えのプログラムは直感的にそれを処理するために内部にする必要があります。したがって、私はこれに役立ついくつかのパターンやフレームワークがあると仮定していますか?

答えて

3

は、残念ながら、それによって引き起こされた例外が起こると、何かがそれらをキャッチするまで上向きに行くことができるどこWCF呼び出しを開始しようとしているので、これを行うための素晴らしい方法はありません。あなたが明示的な呼び出しを行うときにWCFが何もしないので、あなたが知っているHTTPバインディングのために、切断/タイムアウト例外を捕まえて適切に対処することができます。メッセージキューまたはTCPバインディングについては

私はそれはビットメシエを得るかもしれないと思うが、戦術は同じです。いつでもWCF呼び出しを行っているときは、適切な例外を監視する必要があります。アプリケーションはUIを変更する機能を呼び出す必要があります。

2

私は、あなたが「例外処理」と呼ばれて探しているものと信じています。例外は、下から上に向かう方法です。

+0

いいえ、私が話しているのは、このような例外が発生した場合、アプリケーションを中断して再構成を行い、次にアプリケーションを再開できる、何らかの全体的なイベントループですアプリのどこにいても問題について知ることができます。 –

+0

どこかで、再接続が可能で、 'app.Suspend'などを呼び出すことができるハンドラが必要です。私は、助けるべき枠組みや魔法はないと思う。 – Brian

+0

'app'がグローバル変数である場合、ハンドラまたは反転制御に接続するための作業を行う必要はありません。 – Brian

0

あなたが適用される場合があります可能な解決策の1つは、一定の間隔で、最小限の結果を返します非トランザクション方法のいくつかの種類を呼び出すことです。または、インスタンス化されたwcfクライアントの基礎となるソケットオブジェクトを取得できる場合は、チェックのオーバーヘッドはあまり巨大ではありません。ソケットオブジェクトにはおそらく切断に関連する何らかのイベントがありませんが、相手側と通信しようとした場合にのみチェックすることができますが、これについて間違っている可能性があります。

関連する問題