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

时间:2012-02-27 10:55:24

标签: wcf faultexception

我正在尝试创建一些自定义FaultException。我创建了一个名为DataContract的{​​{1}}类。

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; } } }

IService1.cs

并在[OperationContract] [FaultContract(typeof(CreateFault))] void TestFaultException();

Service1.cs

我在我的客户端抓住了public void TestFaultException() { throw new FaultException<CreateFault>(new CreateFault("CreateFault message"), "Message abt exception"); }

FaultException

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

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)
    {
    }
}

但是当我使用自定义catch (FaultException<CreateFault> ex) 创建WCF服务库项目时,客户端无法识别我的自定义异常。它反过来捕获错误:

FaultExceptions

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

编辑: 这是我在调试时得到的,它在

中捕获异常
catch (FaultException ex)

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

{“消息abt例外”}

catch (FaultException ex)

EDIT2:

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

当我改为

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

它有效

1 个答案:

答案 0 :(得分:4)

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

当我改为

catch (FaultException<ServiceReference2.CreateFault> ex) 

它有效

相关问题