我有一个WCF服务,其中一个方法(或操作合同)使用某种类型的通用列表作为参数,但是当我尝试使用此服务,并调用此特定方法时,我收到此错误< / p>
Cannot convert type 'System.Collections.Generic.List<CA.CCS.sCmd>' to 'CA.CCS.sCmd[]'
我不知道为什么需要一个对象数组而不是消费者代码中的通用列表。
我想将该参数仅作为通用列表发送,而不在客户端或服务器上进行任何转换,因为它会妨碍服务性能。
我在堆栈溢出时发现了类似的问题,但没有解决我的问题。
您的回复或其他人回复的链接将不胜感激。
更新 当我尝试添加服务引用时,我得到此窗口,此处找不到任何设置
答案 0 :(得分:4)
由于您仍在使用VS2005,并且您的代理生成器显然希望将其转换为数组参数,因此无论何时调用此方法,您都必须将List<T>
转换为T[]
由于您有一个List<T>
实例,因此您可以使用其ToArray
方法(自.NET 2.0起支持)。因此,您可以执行SomeMethod(myList)
。
SomeMethod(myList.ToArray())
答案 1 :(得分:1)
我想将该参数仅作为通用列表发送,而无需在客户端或客户端进行任何转换 服务器,因为它妨碍了服务性能。
这里有一些我不明白的地方:你调用一个WCF服务,要么你滥用它来发送大量数据,要么没有性能问题。此外,我认为你在这里表现得很苛刻。您期望什么样的性能问题? 即使你有一个非常大的列表:如果它只包含引用类型,则数组只是一个较小指针的列表。只有当你有大量的结构或其他值类型时才会出现性能问题,但仍然只有10,000个双精度值的列表才会使用大约80kb的内存。
如果您输入以下代码:
List<int> myList = new List<int>();
for (int i = 0; i < 10000; i++)
myList.Add(i);
你可能编写了一个更大的性能问题。
除非您有关于可能造成问题的更多信息,否则我会说使用ToArray()
并完成。
答案 2 :(得分:0)
特定的集合类型信息在导出到wsdl时在元数据中丢失,换句话说,在服务和使用者之间发送的集合表示为数组。您可以访问this page并转到“自定义集合类型”部分,了解如何创建自定义集合并在合同中公开它或查看this tutorial