gpt4 book ai didi

c# - WCF 和数据协定接口(interface)

转载 作者:可可西里 更新时间:2023-11-01 08:05:18 24 4
gpt4 key购买 nike

在使用 svcutil 创建 WCF 代理时,是否可以包含数据协定继承的接口(interface),例如:

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

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

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

有没有可能做我想做的事?

最佳答案

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

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

如果您控制电线的两端,例如您同时编写了客户端和服务器,并且都在 .NET 中,那么您可以这样做:

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

  • 从您的服务端代码和客户端引用该程序集。在这种情况下,当您开始创建客户端代理时,您提到的那些类型已经存在并且 WCF 将很乐意重用该程序集中的这些类型。由于这是您引用的 .NET 程序集,您可以在其中包含 .NET 支持的任何内容 - 包括接口(interface)。

关于c# - WCF 和数据协定接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com