3

次のよう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れたの別の実装のすべてに追加します。私のサービス実装はこの属性で装飾されており、次のようにもなっています。IServiceBehaviorGlobalErrorBehaviorAttributeFaultContractAttribute

[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>

4

0 に答える 0