首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF全局异常处理

WCF全局异常处理
EN

Stack Overflow用户
提问于 2011-07-12 22:41:07
回答 3查看 2.3K关注 0票数 2

我已经为我的wcf应用程序构建了一个全局异常处理。我有一个实现'IErrorHandler‘并处理异常的类。我可以使用'IServiceBehavior‘属性注册ErrorHandler。(所以我不需要触及每个函数)

我使用类'FaultException‘来包装我的异常对象。

代码语言:javascript
复制
Dim sysEx As SystemException = 'Do Convert
Dim fex As New FaultException(Of SystemException)(sysEx, sysEx.Message)
Dim faultMessage As MessageFault = fex.CreateMessageFault
fault = System.ServiceModel.Channels.Message.CreateMessage(version, faultMessage, fex.Action)

现在我可以在客户端检索错误消息了。但不幸的是,我无法检索原始异常类型或原始堆栈跟踪。

有没有一个简单的选择来解决这个问题,而不需要在我的服务中的每个函数中添加“FaultContract”?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-12 23:04:30

Steve和Saravanan都是正确的。下面是如何创建自定义故障类型以及如何使用它:

自定义错误契约:

代码语言:javascript
复制
[DataContract]
public class UncaughtErrorFault
{
    [DataMember]
    public string ExecptionType { get; set; }

    [DataMember]
    public string Message { get; set; }

    [DataMember]
    public string StackTrace { get; set; }
}

IErrorHandler方法重写:

代码语言:javascript
复制
public void ProvideFault(Exception error,
                         MessageVersion version,
                         ref Message fault)
{
    var fe = new FaultException<UncaughtErrorFault>(
        new UncaughtErrorFault
            {
                ExecptionType = error.GetType().Name,
                Message = error.Message,
                StackTrace = error.StackTrace
            },
        error.Message,
        FaultCode.CreateReceiverFaultCode(
            new FaultCode(error.GetType().Name)));

    var mf = fe.CreateMessageFault();

    fault = Message.CreateMessage(version, mf, fe.Action);
}
票数 1
EN

Stack Overflow用户

发布于 2011-07-12 22:50:41

使用FaultContracts和抛出带有自定义Fault类型的FaultExceptions是在Fault中处理异常的the recommended way。如果您需要在客户端检索堆栈跟踪,可以在您的WCF behaviour配置中将includeExceptionDetailInFaults设置为真。

票数 1
EN

Stack Overflow用户

发布于 2011-07-12 22:56:40

在IErrorHandler.ProvideFault中,您将在第一个参数中获得异常。您可以将其封装在您的自定义FaultMessage中。

IErrorHandler.ProvideFault(异常错误、MessageVersion版本、ref消息故障)

请参考IErrorHandler Interface。此页提供了一个有关如何执行此异常包装的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6666017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档