WCF。 服务通用方法

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

我写了这段代码:

[OperationContract] void AddItem(T item); 

但是我收到以下错误:

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

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

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

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

XML模式支持所有常见的primefaces类型,如string,int,datetime – 它支持由这些primefaces类型组成的复杂类型,并且它支持inheritance。

但XML模式不支持generics – 因此,通过WCF和SOAP交换的任何内容都不是通用的 – 您只需要使用具体的非generics类型。

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

可以使用数据协定中的有界generics类型,但必须是服务契约中的特定类型参数,以及具有有效数据协定的指定类型参数

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

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

当然,所有inheritance的类型都应该与KnownType属性一起添加。