如何在FirstChanceException事件中抛出新异常

时间:2014-07-02 04:50:03

标签: c# exception exception-handling first-chance-exception

我正在试验我的WCF服务层的FirstChangeException事件处理程序。目的是从任何方法捕获异常并将其作为新的FaultException抛出,以便它可以传递回客户端。

例如,下面是测试服务器类

private static bool thrown;
public class EchoService : _BaseService, IEchoService
{
    public EchoService()
    {
        AppDomain.CurrentDomain.FirstChanceException += HandleFirstChanceException;
    }

    private void HandleFirstChanceException(object sender, FirstChanceExceptionEventArgs e)
    {
        if (thrown == false)
        {
            thrown = true;
            throw new FaultException<Exception>(e.Exception);
        } 
    }

    public DTO_Echo_Response SendEcho(DTO_Echo_Request request)
    {
        DTO_Echo_Response response = new DTO_Echo_Response();

        //SO note: AppError inherits from Exception.
        if (request.ThrowTestException) throw new AppError("Throwing test exception");

        return response;
    }
}

但是,在退出return行上的函数时因为前一次调用来自抛出新异常,我得到以下错误。

The runtime has encountered a fatal error. The address of the error was at 0x750916ed, on thread 0x1d5c. The error code is 0x80131506. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.
我必须做些蠢事。如何实现捕获所有异常处理程序的目标?

1 个答案:

答案 0 :(得分:2)

您在这里使用FirstChanceException事件,这只是一个通知,而不是处理异常的地方。

你可能想要的是

Application.ThreadException
AppDomain.CurrentDomain.UnhandledException

关于这个话题已经有很多问题了。

看看here on ThreadException

同时调查

Application.SetUnhandledExceptionMode

此处解释了WCF中的异常处理:

handling exceptions in WCF right

WCF exceptionn handling