我看到的代理方法为类似List Of <T>
等参数的泛型生成的方法正在被转换为代理方法中的数组。我不确定是什么问题,它是随Visual Studio 2005附带的wsdl.exe无法处理泛型,还是Web服务部署或其他机器上的soap版本?当我在IE 7中查看asmx文件时,我看到了SOAP 1.1,我期望看到soap 1.2,但这可能是IE7的事情。Visual Studio 2005 wsdl.exe可以使用泛型参数创建代理方法吗?
回答
WSDL.EXE和“添加Web引用”将始终使用数组。这与泛型无关。
当你升级到WCF时,你将能够指定使用List<T>
这样的列表。
XML Schema既没有数组也没有列表,只是重复的元素。举例来说,如果你的服务返回List<int>
,WSDL中的XML模式会像
<xs:element name="result" maxOccurs="unbounded" type="xs:int"/>
创建代理类必须决定是否翻译成数组或列出了此程序。使用“添加Web引用”,选择始终是“数组”。使用“添加服务参考”,您可以得到多种选择,包括List<int>
。
.NET的XmlSerializer将集合序列化为数组。我不熟悉泛型列表是否有任何区别,但我很怀疑。因为这样的SOAP“集合”总是.NET数组,所以生成的代理将数组恢复到适当的集合类型(这真的是它的选择)。
序列化为数组的集合的另一个副作用是只有集合元素被序列化。例如,下面的类继承自一个列表,并添加一个新的属性,它将由XmlSerializer序列化,因为数组只包含元素而不包含其他属性,因此而不是。
public class MyList : List
{
public string MyProperty{get;set;}
}
此行为主义是特定于XmlSerializer的,二进制序列化(或许WCF的DataContractSerializer的)可以处理这些条件。
因此,如果方法包含通用列表,SOAP将它转换为你的代理方法中的一个数组,因为如果我使用该方法,我无法使用代理类进行编译,你说它取决于生成的代理来将数组恢复到正确的类型。手动修改生成的代理类来传递正确的类型?我想我没有一个例子仍然困惑。 – OutOFTouch 2010-01-14 19:38:29
XML Schema既没有数组也没有列表,只是重复的元素。代理必须决定是否将其转换为数组或列表。使用“添加Web引用”,选择始终是“数组”。通过“添加服务参考”,您可以获得多种选择。 – 2010-01-14 19:39:57
该项目是在VS 2005中构建的,我没有“添加服务引用”选项,但我很欣赏解释, 所以,我必须手动更改自动生成的代理方法以使用通用列表数组的? – OutOFTouch 2010-01-14 19:45:17
泛型不可互操作。
很多人会建议2005/ASMX webservices不能互操作;-) – STW 2010-01-14 19:35:05
当然不是,但我不认为它们被设计成是或者被设计成他们? WCF旨在尽可能地实现互操作。 – 2010-01-14 19:37:11
@Yooder:很多人会错的。他们已经死了,但是完全可以互操作。 – 2010-01-14 19:37:11
- 1. 我们可以使用方法参数的泛型在Java
- 2. 用于从wsdl创建代理类的wsdl.exe的替代方案
- 3. 如何使用泛型类型参数调用泛型方法
- 4. 使用wsdl.exe创建代理类时出现的问题
- 5. 创建泛型参数
- 6. 可以使用Microsoft Visual Studio 2005 C#打开其他版本的Microsoft Visual Studio吗?
- 7. 使用泛型参数覆盖方法
- 8. 泛型方法,可以构建泛型类型
- 9. 创建泛型方法
- 10. 可以使用VS 2005安装Visual Studio 2008 Express吗?
- 11. Visual Studio 2008可以与Team System 2005一起使用吗?
- 12. 我可以在Visual Studio 2005上使用WCF吗?
- 13. Mockito可以处理在Scala中返回泛型的方法吗?
- 14. 泛型:创建参数化类参数
- 15. 是否可以在C#中调用泛型参数的方法?
- 16. 我可以使用泛型转换此方法吗?
- 17. 我可以在扩展方法中使用泛型T吗?
- 18. 无法附加到使用Visual Studio 2005创建的进程
- 19. 在Visual Studio代码中使用建议的方法参数代码
- 20. 我们可以创建一个泛型类的数组吗?
- 21. 您可以使用泛型方法重载,只更改方法签名的泛型类型吗?
- 22. 我可以在泛型类中创建一个泛型对象,其中要创建的对象的类对泛型类型参数有约束吗?
- 23. Visual Studio 2005 + AjaxToolkit
- 24. 是在Visual Studio 2010中支持的Visual Studio 2005中创建的dll吗?
- 25. 可以使用ModelAttribute作为RequestMapping方法的方法参数吗?
- 26. 是否可以使用2.0框架创建扩展方法?
- 27. 从泛型方法参数类型
- 28. 可以用params来调用强类型参数的方法吗?
- 29. 我可以将类型对象传递给泛型方法吗?
- 30. C#使用泛型方法的MonoTouch方法重载和使用默认参数的非泛型方法
这个帮助吗? svcutil.exe http://localhost/Services/Sample.svc?wsdl /ct:System.Collections.Generic.List'1 – 2010-01-14 19:59:15
@Rubens:他使用VS2005。 – 2010-01-14 20:09:34