我对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错误等)的堆栈信息发送到客户端。
在这种情况下,我是否需要检查异常类型并在发送给客户端之前将细节更合适?
答案 0 :(得分:0)
主要要求是使用FaultContractAttribute,以便WCF了解正在履行的服务合同。请参阅http://msdn.microsoft.com/en-us/library/ms752208(v=vs.110).aspx
WCF还将确保您的WSDL反映您的错误合同。