gpt4 book ai didi

c# - Web 服务方法签名更改为数据类型字符串 [] 的请求/响应对象

转载 作者:行者123 更新时间:2023-11-30 18:10:33 28 4
gpt4 key购买 nike

我有两个网站,都使用 .Net framework 3.5。一个网站托管 soap 网络服务,另一个网站引用该服务。我的 Web 方法签名出现了一些意外情况。我的 Web 服务中有一个带有签名的简单方法,例如:

[WebMethod]
public string[] HelloWorld()
{
return new[] { "Hello World" };
}

但是当我使用 VS2008 中的“添加服务引用”功能引用此 Web 服务时,配置设置为“始终生成消息契约(Contract)”(尽管当我检查“引用程序集中的重用类型”时,我似乎有同样的问题),签名似乎被自动生成的代理对象更改为以下内容:

HelloWorldResponse HelloWorld(HelloWorldRequest request)

我试图在网上查找此问题,但找不到可以简单地向我解释为什么会发生这种情况以及我是否可以/应该尝试解决它的内容?

我也有这个问题:如何确定他们是否应该选择服务引用配置选项以“在引用程序集中重用类型”和“始终生成消息协定”?

最佳答案

message-contracts选项可能有这种效果;这里的目的是允许对底层请求进行细粒度控制。最终,您发送的(在幕后)请求负载。

reuse-types 选项更常用于对象(不是像 string[] 这样的东西)——这意味着如果你有一个 100% 匹配的 Customer(比如) 本地类,它可以将其重新用于 Web 服务,而不是生成代理类型。

此外,请注意您实际上并没有使用 WCF 服务([WebMethod] 是较旧的网络服务样式)。因此,使用“网络引用”可能会获得更好的结果;添加服务时,点击“高级”,然后点击“添加 Web 引用...”。这使用较旧的 UI 和 wsdl.exe 为 [WebMethod] (asmx) 而不是 WCF (svc) 生成代码预期

当然,您可以(因为服务器也是 3.5)托管 WCF 服务,而不是托管 [WebMethod];这可能会使事情变得更容易。

WCF 的最后一点;如果您真的想要在客户端和服务器端使用相同的契约,您可以使用程序集或类共享来在两端使用完全相同的类型。不过,[WebMethod] 不支持此功能。

关于c# - Web 服务方法签名更改为数据类型字符串 [] 的请求/响应对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252737/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com