1

我看到为具有参数泛型的方法生成的代理方法List Of <T>正在转换为代理方法中的数组。我不确定问题出在哪里,是 Visual Studio 2005 附带的 wsdl.exe 无法处理泛型,还是部署 Web 服务的机器上的 soap 版本或其他什么?当我在 IE 7 中查看 asmx 文件时,我看到了 SOAP 1.1,我希望看到的是 soap 1.2,但这可能是 IE7 的问题。

4

3 回答 3

1

WSDL.EXE 和“添加 Web 引用”将始终使用数组。这与泛型无关。

当您升级到 WCF 时,您将能够指定List<T>用于这样的列表。


XML Schema 既没有数组也没有列表,只有重复的元素。例如,如果您的服务返回List<int>,则 WSDL 中的 XML Schema 将类似于

<xs:element name="result" maxOccurs="unbounded" type="xs:int"/>

创建代理类的程序必须决定是否将其转换为数组或列表。使用“添加 Web 引用”,选择始终是“数组”。使用“添加服务参考”,您可以获得许多选择,包括List<int>.

于 2010-01-14T19:30:39.707 回答
1

.NET 的 XmlSerializer 将集合序列化为数组。我不熟悉通用列表是否有任何区别,但我对此表示怀疑。由于此类 SOAP“集合”始终是 .NET 数组,因此由生成的代理将数组恢复为正确的集合类型(这确实是它的选择)。

将集合序列化为数组的另一个副作用是只有集合元素被序列化。例如,下面的类继承自一个列表并添加了一个不会被 XmlSerializer 序列化的新属性,因为数组只包含元素而不包含其他属性。

public class MyList : List
{
    public string MyProperty{get;set;}
}

这种行为主义是 XmlSerializer 特有的,二进制序列化程序(也许还有 WCF 的 DataContractSerializer)可以处理这些情况。

于 2010-01-14T19:31:30.703 回答
0

泛型不可互操作。

于 2010-01-14T19:32:41.560 回答