Wcf使用IErrorHandler接口处理错误

时间:2014-01-13 16:27:05

标签: c# wcf ierrorhandler

我对WCF故障异常有疑问。我正在实现IErrorHandler接口并创建FaultException

我的问题是:我什么时候创建FaultException,是否有必须遵循的模式才能向客户端发送友好的错误消息?

我使用HandleError方法将实际异常记录到数据库,并在FaultException方法中创建ProvideFault

鉴于delow,我有IErrorHandler接口的示例实现。

public bool HandleError(Exception error)
{
    System.Diagnostics.Debug.WriteLine(error.Message);
            // Log the error to the Db  
    return true;
}

public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
        // Here is a sample that I was playing with. 
    MessageFault faultException;
    if(error is DataException)
        faultException = new FaultException<string>(ErrorStrings.DatabaseOpenError, new FaultReason(ErrorStrings.DatabaseOpenError)).CreateMessageFault();
    else if (error is NullReferenceException)
        faultException = new FaultException<string>(ErrorStrings.NullDataError, new FaultReason(ErrorStrings.NullDataError)).CreateMessageFault();
    else
        faultException = new FaultException<string>(ErrorStrings.GeneralError, new FaultReason(ErrorStrings.GeneralError)).CreateMessageFault();

    fault = Message.CreateMessage(version, faultException, "");
}

我需要清楚明确在ProvideFault方法中要做什么才能将友好的错误返回给用户。我还计划使用本地化来显示错误。不确定这是由客户端完成还是服务应该发送本地化消息。

根据我读到的内容,由于安全原因,我不应该将错误或EntityFramework错误(如EntityValidation错误等)的堆栈信息发送到客户端。

在这种情况下,我是否需要检查异常类型并在发送给客户端之前将细节更合适?

1 个答案:

答案 0 :(得分:0)

主要要求是使用FaultContractAttribute,以便WCF了解正在履行的服务合同。请参阅http://msdn.microsoft.com/en-us/library/ms752208(v=vs.110).aspx

WCF还将确保您的WSDL反映您的错误合同。