我可以停止服务引用生成ArrayOfString而不是string 吗?

我有一个带有这样签名的web方法:

public string[] ToUpper(string[] values) 

我在Visual Studio 2010中使用“添加服务引用”来生成对我的服务的引用。 不幸的是,这个过程创建了一个名为“ArrayOfString”的代理类,并使用这种类型而不是预期的’string []’类型。 生成的异步服务调用签名最终如下所示:

 public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values) { } public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values, object userState) { } 

我已经尝试了配置服务参考表单中“收集”下拉列表的所有选项,但它似乎并没有什么区别。

这在以前工作,但由于某种原因它可能突然停止工作,可能是从服务中删除另一个Web方法。

如何让生成的服务引用类使用string []类型而不是生成的ArrayOfString类型? 任何有关这方面的帮助将不胜感激。

编辑:正如@Oleg建议的那样,我正在使用ASMX Web服务。

在向ASMX样式的Web服务添加“服务引用”时,我可以重现您的问题。 但是,当向WCF服务添加“服务引用”或向ASMX服务参数添加“Web引用”时,类型为string []。

根据这一点,我认为您可以通过“Web引用”替换“服务引用”来解决您的问题。

按“添加服务引用对话框”上的“高级…”按钮。 添加服务参考

按“添加网络参考…” 高级

插入服务url并添加网络参考 添加Web引用

这个对XmlSerializer的更改可以在Reference.svcmap文件中完成。 在Service Reference文件夹中打开它并将Serializer xml节点从“Auto”更改为“XmlSerializer”,这解决了问题! 干杯

太晚但可以帮助将来的人……

使用svcutil并显式通知命令行util您希望XmlSerializer而不是DataContractSerializer(默认)序列化代理类。 这是样本:

svcutil /out:c:\Path\Proxy.cs /config:c:\Path\Proxy.config / async / serializer:XmlSerializer / namespace:*,YourNamespace http://www.domain.com/service/serviceURL.asmx

请注意,Web服务是一个ASP.NET Web服务好吗?!