如何处理wcf服务中的异常回调

时间:2012-01-25 16:48:48

标签: c# .net web-services exception

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

更好的解决方案是使用IErrorHandler之类的东西并抛出FaultExceptions。装饰您的操作以使用FaultContract属性抛出FaultExceptions。现在,您可以在客户端捕获特定的FaultExceptions。您不应该将服务器上的异常暴露给客户端。