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

发布于 2024-10-16 12:13:05 字数 657 浏览 4 评论 0原文

我有一个具有如下签名的 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 服务。

I have a web method with a signature like this:

public string[] ToUpper(string[] values)

I am using the 'Add Service reference' in Visual Studio 2010 to generate a reference to my service. Unfortunately, this process creates a proxy class called 'ArrayOfString' and uses this type instead of the expected 'string[]' type. The generated async service call signature ends up looking like this:

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

I have tried all the options of the 'Collection' drop down on the config service reference form and it doesn't seem the make a difference.

This was working previously, but for some reason it suddenly stopped working, perhaps after removing another web method from the service.

How do I get the generated service reference class to use the string[] type instead of a generated ArrayOfString type? Any help on this would be greatly appreciated.

EDIT:
As @Oleg suggests, I am using ASMX web services.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

Smile简单爱 2024-10-23 12:13:05

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

this change to XmlSerializer can ben done inside the Reference.svcmap file. Open it inside the Service Reference folder and change the Serializer xml node from "Auto" to "XmlSerializer" this solves the problem!
Cheers

寒江雪… 2024-10-23 12:13:05

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

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

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

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

插入服务 URL 并添加 Web 引用
添加网络引用

I could reproduce your problem when adding a "Service reference" to an ASMX style web service. However when adding "Service refernce" to a WCF service or "Web reference" to an ASMX service argument was of type string[].

According to this I think that you can fix your problem by replacing "Service reference" by "Web reference".

Press "Advanced..." button on "Add service reference dialog".
Add service reference

Press "Add web reference..."
Advanced

Insert service url and add web reference
Add web reference

伪心 2024-10-23 12:13:05

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

使用 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 服务好吗?!

Too late but can help people in the future...

Use the svcutil and explicitly inform the command line util that you want the proxy class to be serialized by the XmlSerializer and not the DataContractSerializer (default). Here's the sample:

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

Note that the web service is an ASP.NET web service ok?!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文