【问题标题】:Can I stop service reference generating ArrayOfString instead of string[]?我可以停止生成 ArrayOfString 而不是 string[] 的服务引用吗?
【发布时间】:2011-06-23 05:14:16
【问题描述】:

我有一个带有这样签名的 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 服务。

【问题讨论】:

  • 也许您的服务方法正在返回字符串列表 - 看看stackoverflow.com/questions/505943/…
  • @VinayC:我确实首先阅读了这个问题,尽管作者要求回答他的两个问题中的任何一个。我想知道“有没有办法告诉它不要生成 ArrayOfString”这个问题的答案,该帖子中没有回答。

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


【解决方案1】:

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

【讨论】:

  • 完美。将愚蠢的“ArrayOfXXX”解决为 List 的东西,并且不使用传统技术。不错的一个:)
  • 这对我有帮助!谢谢!
【解决方案2】:

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

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

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

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

插入服务网址并添加网页参考

【讨论】:

  • @Oleg:“Web References”使用旧的 ASMX 技术,被微软视为“遗留技术”。
  • @John:您 100% 正确,但据我了解,Luke Baulch 已经拥有 ASMX 网络服务。正如我在回答中提到的,只有在将“服务参考”与 ASMX 服务一起使用时,该问题才能重现。使用 WCF 服务一切正常。这就是为什么我假设使用了 ASMX 服务并建议使用“Web Reference”而不是“Service Reference”。认为使用传统 ASMX 服务的另一个原因是,问题中提到了“Web 方法”,但没有提到“操作合同”。
  • @Oleg:“两错不成对”。仅仅因为在服务端使用 ASMX 并不意味着它应该在客户端使用。
  • @John:我完全同意你的观点,并且理解将服务重写为 WCF 会是更好的解决方案。因此,您可能会将我的解决方案视为某种简单的 hack。
  • @Oleg:我不是建议重写。我建议,为了这么小的收益,最好使用ArrayOfString,而不是在不必要的地方使用遗留技术。
【解决方案3】:

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

使用 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

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

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多