我正在尝试使用AppDomain.CurrentDomain.UnhandledException记录我的异常。
AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException;
public static void AppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
HandleException(e.ExceptionObject as Exception);
}
当我在服务器中遇到异常时,我会在调试时在客户端遇到错误,但挂起到AppDomain.CurrentDomain.UnhandledException的事件永远不会被触发。
服务器:
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
public class Service : IService
{
public string GetError()
{
throw new ApplicationException();
}
}
客户端:
public void GetError()
{
this.service.BeginGetError(OnGetErrorCompleted, null);
}
public void OnGetErrorCompleted(IAsyncResult result)
{
var value = this.service.EndGetError(result);
}
除非我使用Distpacher.BeginInvoke ..
,否则这不起作用public void OnGetErrorCompleted(IAsyncResult result)
{
this.Dispatcher.BeginInvoke((Action)(() =>
{
var value = this.service.EndGetError(result);
}));
}
有人知道为什么? 我认为在任何线程中发生异常时都会触发AppDomain.CurrentDomain.UnhandledException! :S
答案 0 :(得分:0)
更好的解决方案是使用IErrorHandler之类的东西并抛出FaultExceptions。装饰您的操作以使用FaultContract属性抛出FaultExceptions。现在,您可以在客户端捕获特定的FaultExceptions。您不应该将服务器上的异常暴露给客户端。