WCF和数据契约接口

gan*_*ran 13 .net c# wcf

在使用svcutil创建WCF代理时,是否可以包含数据契约继承的接口,例如:

public class SomeType: ISometype
{
   public string Name { get; set; }
}

public interface ISometype
{
   public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我使用它创建代理时,在客户端创建SomeType类型但是没有创建接口,也没有继承.我尝试将接口标记为DataContract,但该属性不允许.

有可能做我想做的事吗?

mar*_*c_s 21

WCF使用序列化消息传递,所有这些消息都需要能够使用DataContractSerializer或XmlSerializer进行序列化.并且在客户端和服务器之间传递的消息需要在XML模式中表达.

现在,XML模式对接口一无所知 - 所有这些都与具体的实际类型有关.对于客户端可以是从.NET到PHP,从Ruby到(无论如何)的常规方案,您需要确保以可在XML模式中表示的方式表达您希望在客户端和服务器之间发送的所有内容 - 接口不能.因此,在通用场景中实际上没有办法支持这一点.

如果您正在控制线路的两端,例如您同时在.NET中编写客户端和服务器,那么您可以执行以下操作:

  • 将您的DataContracts(以及您的ServiceContracts和OperationContracts和FaultContracts)全部放入一个单独的MyServiceContracts程序集中

  • 从服务端代码和客户端引用该程序集.在这种情况下,当您要创建客户端代理时,您提到的那些类型已经存在,WCF将很乐意重用该程序集中的那些类型.由于这是一个你正在引用的.NET程序集,你可以拥有.NET支持的任何内容 - 包括接口.