C# WCF和数据合同接口
在使用svcutil创建WCF代理时,是否可以包括数据契约继承的接口,例如:C# WCF和数据合同接口,c#,.net,wcf,C#,.net,Wcf,在使用svcutil创建WCF代理时,是否可以包括数据契约继承的接口,例如: public class SomeType: ISometype { public string Name { get; set; } } public interface ISometype { public string Name { get; set; } } 当我使用这个创建代理时,SomeType类型在客户端创建,但是接口没有创建,也没有继承。我尝试将接口标记为DataContract,但不允
public class SomeType: ISometype
{
public string Name { get; set; }
}
public interface ISometype
{
public string Name { get; set; }
}
当我使用这个创建代理时,SomeType类型在客户端创建,但是接口没有创建,也没有继承。我尝试将接口标记为DataContract,但不允许该属性
是否可以执行我试图执行的操作?您可以从实现
ISometype
的类继承,并使用KnownType属性将其添加到序列化:
WCF使用序列化消息传递,所有这些消息都需要能够使用DataContractSerializer或XmlSerializer进行序列化。在客户端和服务器之间传递的那些消息需要能够用XML模式表达 现在,XML模式对接口一无所知——它只知道具体的、实际的类型。对于一个常规场景,您的客户机可以是从.NET到PHP到Ruby的任何东西,您需要确保以一种可以用XML模式表示的方式在客户机和服务器之间表达您想要发送的所有内容—接口不能。因此,在通用场景中,确实没有办法支持这一点 如果您控制线路的两端,例如,您同时在.NET中编写客户端和服务器,则可以执行以下操作:
- 将您的DataContracts(以及您的ServiceContracts、OperationContracts和FaultContracts)全部放入一个单独的
程序集中MyServiceContracts
- 从服务端代码和客户端引用该程序集。在这种情况下,当您准备创建客户机代理时,您提到的那些类型已经存在,WCF将很高兴地从该程序集中重用这些类型。由于您正在引用的是.NET程序集,所以其中可以包含.NET支持的任何内容,包括接口