Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF。服务通用方法_C#_Wcf_Generics - Fatal编程技术网

C# WCF。服务通用方法

C# WCF。服务通用方法,c#,wcf,generics,C#,Wcf,Generics,如何在wcf服务中使用通用方法 我写了这段代码: [OperationContract] void AddItem<T>(T item); [运营合同] 无效附加项(T项); 但我收到以下错误: 类型“T”不能作为架构类型导出,因为它是开放泛型类型。只有当泛型类型的所有泛型参数类型都是实际类型时,才能导出泛型类型 你就是不能。这是不可能的,因为soap不支持这一点。请参阅此文,其中提到如何绕过泛型,方法是创建一个中间本地对象,在调用WCF操作之前调用并强制转换该对象。您不应该尝试

如何在wcf服务中使用通用方法

我写了这段代码:

[OperationContract]
void AddItem<T>(T item);
[运营合同]
无效附加项(T项);
但我收到以下错误:

类型“T”不能作为架构类型导出,因为它是开放泛型类型。只有当泛型类型的所有泛型参数类型都是实际类型时,才能导出泛型类型


你就是不能。这是不可能的,因为soap不支持这一点。请参阅此文,其中提到如何绕过泛型,方法是创建一个中间本地对象,在调用WCF操作之前调用并强制转换该对象。

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

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

XMLSchema支持所有常用的原子类型,比如string、int、datetime,它支持由这些原子类型组成的复杂类型,并且支持继承

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


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

错误表明不允许打开类型。可能允许的情况如下:

[OperationContract]
void AddItem<T>(T item) where T : MyBaseType;
[运营合同]
作废附加项(T项),其中T:MyBaseType;

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

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

从我刚做的测试来看,这似乎不起作用。它仍然抱怨它是一个开放的泛型类型。