繁体   English   中英

WCF和数据契约接口

[英]WCF and interfaces on data contracts

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

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

public interface ISometype
{
   public string Name { get; set; }
}

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

有可能做我想做的事吗?

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

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

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

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

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

您可以从实现ISometype的类继承,并使用KnownType属性将其添加到序列化:

我可以强制svcutil.exe为WCF服务生成数据协定吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM