8

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

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

4

3 回答 3

15

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

于 2014-03-06T10:01:29.307 回答
5

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

据此,我认为您可以通过将“服务参考”替换为“Web 参考”来解决您的问题。

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

按“添加网络参考...” 先进的

插入服务 url 并添加 web 参考 添加网页参考

于 2011-02-13T13:38:12.320 回答
2

为时已晚,但可以帮助未来的人......

使用 svcutil 并明确通知命令行实用程序您希望代理类由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 服务,好吗?!

于 2011-04-19T22:11:37.680 回答