我打算在windows服务中托管服务,但我正在考虑标题中描述的问题。有人有类似的问题吗?谢谢
更新
问题是当您在 WinForms/WPF/Win Service 应用程序中引发异常时,程序会崩溃,您必须重新启动它。
我打算在windows服务中托管服务,但我正在考虑标题中描述的问题。有人有类似的问题吗?谢谢
问题是当您在 WinForms/WPF/Win Service 应用程序中引发异常时,程序会崩溃,您必须重新启动它。
异常并不总是使您的服务器崩溃。即使是意外的服务器端异常也会转移到客户端。它被认为比预期的更严重,导致通道故障。
基本思想是在你的接口契约中包含预期的异常(错误)。有很多方法可以做到这一点,这里有一篇介绍文章。
当然,您需要在服务器上进行体面的异常处理。
您可以尝试通过在主机应用程序的 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
}
}