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

时间:2011-02-08 04:58:23

标签: c# web-services asmx proxy-classes

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

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服务。

3 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:5)

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

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

按“添加服务参考对话框”中的“高级...”按钮。 Add service reference

按“添加网络参考...” Advanced

插入服务网址并添加网络参考 Add web reference

答案 2 :(得分:2)

太晚了但可以帮助将来的人......

使用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服务确定?!