使用 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 支持的任何内容 - 包括接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)