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