次のよう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>