1

我尝试传输一个 DTO(WCF 客户端到 WCF 服务器),其中包含一个带有接口的子对象。

我的代码:

WCF服务方法:

[OperationBehavior(TransactionScopeRequired = true)]
public void SendTest(MyTestDto testDto)
{
  ...
}

MyTestDto 类:

[Serializable]
[DataContract(Name = "MyTestDto")]
public class MyTestDto : ITestDto
{
   [DataMember(IsRequired = true, Order = 1, Name = "MyTestDto")]
   [DataMemberValidation(IsRequired = true)]
   public ITest Test { get; set; }

}

测试接口:

public interface ITest
{
    int Field1 {get;set;}
    int Field2 {get;set,}
}

问题是,FaultException如果我将 MyTestDto 从服务器传输到客户端,我总是会得到一个。我分析了 WSDL 文件,测试字段的类型为:AnyType. 我想,这就是问题所在。我已经用ITest抽象类替换了 ,因此通信正常(当然我必须ServiceKnownType用抽象类设置属性)。

你能帮助我吗?为什么它适用于抽象类而不适用于接口?

4

1 回答 1

1

WCF 使用具体类型,接口不能通过 WCF 序列化。

ServiceKnownType仅当您使用属性标记服务或使用属性标记数据协定时,才能使接口成为抽象类KnownType。下面是一个例子;

public abstract Test
{
    public int Field1 {get;set;}
    public int Field2 {get;set,}
}

public class SomeTest : Test
{ 
    ...
}

[ServiceKnownType(typeof(SomeTest))]
public class SomeService : ISomeService
{
     public void SendTest(Test test)
}
于 2013-02-18T08:50:44.727 回答