8

サーバーボックスでWindowsサービスとしてホストされているWCFサービスに対して実行されているGUIクライアントがあります。WCFサービスはPerCallInstanceContextModeで実行されており、クライアントにはサービスクライアントのシングルトンインスタンスがあります。多くの非同期呼び出しの処理が困難になるため、呼び出しごとにシングルトンを再インスタンス化することは避けたいと思います。

私にとっての問題は、Windowsサービスが再起動された後、クライアントが電話をかけるたびに、次のような例外メッセージが表示されることです。

サーバーによって開始されたシャットダウンのために出力セッションが自動的に閉じられたため、このチャネルを使用してメッセージを送信することはできなくなりました。DispatchRuntime.AutomaticInputSessionShutdownをfalseに設定して自動クローズを無効にするか、リモートサーバーでシャットダウンプロトコルを変更することを検討してください。

これを回避するための最良の方法は何ですか?サービスクライアントへのすべての呼び出しの周りにtry-catch句を配置し、通信例外でシングルトンインスタンスを再インスタンス化できますが、これには多くの定型コードが含まれます。

4

2 に答える 2

9

最善の方法は、サーバー上の例外をすべて一緒に回避することです。WCFサーバーで、キャッチおよび処理されていない例外が発生した場合、チャネルは「障害」が発生し、使用できなくなります。

サーバー側では、 IErrorHandlerインターフェイスを実装し、.NET例外をキャッチして、チャネルに障害を発生させることなく、より適切にクライアントに返されるSOAP障害に変換できます。

これにより、サーバー上のすべての.NET例外をキャッチし、これらの問題を引き起こさない相互運用可能なSOAP障害に変換できます。

詳細については、以下を参照してください。

于 2009-12-31T12:56:02.933 に答える
0

これを見て、おそらくその定型コードの一部を回避することができます。

http://wcfproxygenerator.codeplex.com

于 2009-12-31T18:02:04.667 に答える