繁体   English   中英

周转基金。 服务通用方法

[英]WCF. Service generic methods

如何在 wcf 服务中使用泛型方法?

我写了这段代码:

[OperationContract]
void AddItem<T>(T item);

但我收到以下错误:

类型“T”不能作为架构类型导出,因为它是一个开放的泛型类型。 如果所有泛型参数类型都是实际类型,则只能导出泛型类型。

你根本做不到。 这是不可能的,因为肥皂不支持这一点。 请参阅这篇文章,其中提到了如何绕过泛型,方法是创建一个中间本地对象,该对象在调用 WCF 操作之前被调用并转换该对象。

你不应该试图这样做。 在支持 SOAP 的 Web 服务中,在发布 WSDL 时需要知道所有类型,以便客户端能够生成代理。 SOAP 规范中根本不存在泛型。 SOAP 旨在实现互操作,并且并非所有语言都存在泛型。

可以使用数据契约中的有界泛型类型,但必须是服务契约中指定的类型参数,并作为具有有效数据契约的指定类型参数

正如所有其他人已经提到的,WCF 和 SOAP 不支持这一点。 问题是:您在客户端和服务器之间来回传递的任何内容都必须可以在 XML 模式文档中表达。

XML 模式支持所有常见的原子类型,如字符串、整数、日期时间——并且支持由这些原子类型组成的复杂类型,并且支持继承。

但是 XML 模式不支持泛型——因此,您通过 WCF 和 SOAP 交换的任何东西都不能是泛型的——您只需要使用具体的非泛型类型。

我也不知道有什么办法可以解决这个问题。 这是一个限制,你现在必须忍受它。

该错误表示不允许打开类型。 可能允许的是:

[OperationContract]
void AddItem<T>(T item) where T : MyBaseType;

当然,所有继承的类型都应该加上KnownType属性。

暂无
暂无

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

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