Visual Studio 2005 wsdl.exe可以使用通用参数创建代理方法吗?

时间:2010-01-14 19:28:25

标签: visual-studio wsdl.exe

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

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

.NET的XmlSerializer将集合序列化为数组。如果Generic列表有任何不同,我不熟悉,但我对此表示怀疑。因为SOAP“集合”总是.NET数组,所以由生成的代理将数组恢复到正确的集合类型(这是它的选择)。

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

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

这种行为主义特定于XmlSerializer,二进制序列化器(也许是WCF的DataContractSerializer)可以处理这些条件。

答案 2 :(得分:0)

泛型不可互操作。