1

在我的 WCF 服务上,我有几个自定义故障类型。一个称为 BaseFault 的抽象类型和它的两个实现称为 TypeOneFault 和 TypeTwoFault

我像这样在服务端抛出异常

public string ThisMethodHasFault(string eType)
{
    if (eType.Contains("One"))
    {
        TypeOneFault one = new TypeOneFault("TypeOneFault thrown");
        throw new FaultException<TypeOneFault>(one, new FaultReason(new FaultReasonText("Fault reason here")));
    }
    else
    {
        TypeTwoFault two = new TypeTwoFault("TypeTwoFault thrown");
        throw new FaultException<TypeTwoFault>(two, new FaultReason(new FaultReasonText("Fault reason here")));
    }

    return "";
}

我的服务界面是这样的

[OperationContract]
[FaultContract(typeof(TypeOneFault ))]
[FaultContract(typeof(TypeTwoFault ))]
string ThisMethodHasFault(string eType);

在客户端,我有一个测试 winform 应用程序,我像这样捕获它

   MyServiceClient client = new MyServiceClient();

   try
    {
        client.ThisMethodHasFault(""); //get value from user

    }
    catch (FaultException<TypeOneFault>  ox)
    {
         TypeOneFault oneEx = ox.Detail;
         oneEx.{property} ...

    }   
    catch (FaultException<TypeTwoFault>  tx)
    {
         TypeTwoFault twoEx = tx.Detail;
         twoEx.{property} ...
    }    

问题:

在上面的方法中,我只获得了自定义故障类的属性,而不是我在其中定义的方法。该方法在我在子类 TypeOne 和 TypeTwo 中实现的基本抽象类中定义为抽象。有没有办法获得该方法?

4

2 回答 2

4

方法不序列化。只有数据。

于 2012-10-16T12:02:14.283 回答
0

支持的序列化仅适用于数据。从本质上讲,任何 Web 服务都必须隐藏实现并仅为您提供服务。序列化的是使任何客户端能够有效交互的数据类型。不需要序列化方法。

于 2012-10-16T12:11:49.287 回答