我已经实现ProvideFault
了IErrorHandler
接口的方法如下:
public void ProvideFault(Exception ex, MessageVersion version, ref Message fault)
{
ResponseModel responseModel = new ResponseModel();
responseModel.EndDate = DateTime.Now;
FaultException<ResponseModel> faultEx;
if (ex is FaultException<ResponseModel>)
{
return;
}
ServerCoreException coreException = ex as ServerCoreException;
if (coreException != null)
{
ServerCoreException serverCoreException = coreException;
faultEx = new FaultException<ResponseModel>(responseModel,
new FaultReason(serverCoreException.Message),
new FaultCode(serverCoreException.ErrorCode.ToString()));
}
else
{
faultEx = new FaultException<ResponseModel>(responseModel,
new FaultReason(ex.Message),
new FaultCode("-1"));
}
MessageFault msgFault = faultEx.CreateMessageFault();
fault = Message.CreateMessage(version, msgFault, faultEx.Action);
}
然后我将此实现添加到每个调用ChannelDispatcherBase
的另一个实现中。我的服务实现用这个属性装饰,并且还具有:IServiceBehavior
GlobalErrorBehaviorAttribute
FaultContractAttribute
[FaultContract(typeof(ResponseModel), Name = "ServiceFaultException",
Namespace = "http://ws.net.core/base/model")]
但是对服务实现中的方法的测试总是失败,抱怨收到的错误不是类型FaultException<ResponseModel>
,而是FaultException
:
Assert.That(() => client.CreateVersion(request), Throws.TypeOf<FaultException<ResponseModel>>());
为什么我收到FaultException
而不是FaultException<ResponseModel>
在客户端?