客户端无法正确捕获WCF自定义故障异常

Joh*_*örk 5 wcf faultexception

我正在尝试创建一些自定义FaultException.我做了一个DataContract叫做的课CreateFault.

[DataContract]
public class CreateFault
{
    private string report;

    public CreateFault(string message)
    {
        this.report = message;
    }

    [DataMember]
    public string Message
    {
        get { return this.report; }
        set { this.report = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将故障抛在服务方法中.

IService1.cs

[OperationContract]
[FaultContract(typeof(CreateFault))]
void TestFaultException();
Run Code Online (Sandbox Code Playgroud)

并在 Service1.cs

public void TestFaultException()
{
    throw new FaultException<CreateFault>(new CreateFault("CreateFault message"), "Message abt exception");
}
Run Code Online (Sandbox Code Playgroud)

我抓住了FaultException我的客户.

private void btnTest_Click(object sender, RoutedEventArgs e)
{
    try
    {
        ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
        client.TestFaultException();
    }
    catch (FaultException<CreateFault> ex)
    {
        MessageBox.Show(ex.Detail.Message, "Success", MessageBoxButton.OK, MessageBoxImage.Error);
    }
    catch (FaultException ex)
    {
        MessageBox.Show(ex.Message, "Failure", MessageBoxButton.OK, MessageBoxImage.Error);
    }
    catch (Exception ex)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在问题来了.当我在Visual Studio 2010中创建WCF服务应用程序项目时,它的工作方式与预期的一样.错误发生在:

catch (FaultException<CreateFault> ex)
Run Code Online (Sandbox Code Playgroud)

但是,当我使用自定义创建WCF服务库项目时,FaultExceptions客户端无法识别我的自定义异常.它反过来捕获错误:

catch (FaultException ex)
Run Code Online (Sandbox Code Playgroud)

为什么它不适用于WCF服务应用程序项目?

编辑:这是我在调试时获取异常的结果

catch (FaultException ex)
Run Code Online (Sandbox Code Playgroud)

(在立即窗口中键入?ex)

{"消息abt例外"}

[System.ServiceModel.FaultException<WpfApplication1.ServiceReference2.CreateFault>]: {"Message abt exception"}
base {System.ServiceModel.CommunicationException}: {"Message abt exception"}
Action: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault"
Code: {System.ServiceModel.FaultCode}
Message: "Message abt exception"
Reason: {Message abt exception}
Run Code Online (Sandbox Code Playgroud)

EDIT2:

发现了问题.我有两个Service引用,它们都有CreateFault DataContract.当我运行该程序时,它使用了错误的一个.

当我改为

catch (FaultException<ServiceReference2.CreateFault> ex) 
Run Code Online (Sandbox Code Playgroud)

有效

Joh*_*örk 5

发现问题了。我有两个 Service 引用,它们都有 CreateFault DataContract。当我运行程序时,它使用了错误的程序。

当我改为

catch (FaultException<ServiceReference2.CreateFault> ex) 
Run Code Online (Sandbox Code Playgroud)

有效