我尝试将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; }
}
ITest界面:
public interface ITest
{
int Field1 {get;set;}
int Field2 {get;set,}
}
问题是,如果我将MyTestDto从Server传输到Client,我总是FaultException
。我已经分析了WSDL文件,测试字段的类型为:AnyType
。我想,这就是问题所在。我用抽象类替换了ITest
,因此通信工作(当然我必须用抽象类设置ServiceKnownType
属性)。
答案 0 :(得分: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)
}