Windowsサービスでサービスをホストしようと思っているのですが、タイトルに書いてある問題で悩んでいます。誰かが同様の問題を抱えていましたか?ありがとう
アップデート
問題は、WinForms/WPF/Win Service アプリで例外をスローすると、プログラムがクラッシュし、再起動する必要があることです。
Windowsサービスでサービスをホストしようと思っているのですが、タイトルに書いてある問題で悩んでいます。誰かが同様の問題を抱えていましたか?ありがとう
問題は、WinForms/WPF/Win Service アプリで例外をスローすると、プログラムがクラッシュし、再起動する必要があることです。
例外によってサーバーが常にクラッシュするとは限りません。予期しないサーバー側の例外でさえ、クライアントに転送されます。ただし、チャネルに障害が発生しており、予想よりも深刻であると考えられています。
基本的な考え方は、インターフェイス コントラクトに予想される例外 (障害) を含めることです。その方法はたくさんありますが、こちらに紹介記事があります。
そしてもちろん、サーバーで適切な例外処理が必要です。
Host アプリケーションの Main メソッド エントリ ポイントの ThreadException イベントにフックして、それが FaultException であるかどうかを確認することにより、例外をインターセプトすることができます。
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
// Hook to this event below
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
if (e.Exception is FaultException)
return; // Bypass FaultExceptions;
else
throw e.Exception; // Throw otherwise
}
}