gpt4 book ai didi

C# 网络服务客户端 : multiple web-service methods with same (complex) return type?

转载 作者:太空狗 更新时间:2023-10-29 20:06:40 24 4
gpt4 key购买 nike

我目前正在努力为 Java B2B 网络服务构建客户端,我想我已经确定了我们已经遇到了很长一段时间的问题的原因。很遗憾,我无法发布 WSDL。

显然,我自动生成的代理代码(通过 wsdl.exe:由于 WCF 不支持密码摘要,必须使用 WSE 3.0)无法处理具有多个具有相同复杂返回类型的网络方法的网络服务的 WSDL .

举个例子 - 一个定义了以下方法的网络服务:

Public ComplexTypeX Blah();
Public ComplexTypeX Blue();
Public ComplexTypeX Foo();
Public ComplexTypeY Bar();

在我的 Reference.cs 文件中,如果我注释掉所有调用 Blah()、Blue() 或 Foo() 中任意两个的代码,那么其余未注释的方法可以调用没有问题。但是,如果这三种方法中的一种以上没有被注释掉(比如 Blah() 和 Foo()),那么我会在 Web 服务客户端代码实例化 时收到以下错误消息:

"Method Blah can not be reflected." "The XML element 'ComplexTypeX' from namespace 'http://some.url' references a method and a type. Change the method's message name using WebMethodAttribute or change the type's root element using the XmlRootAttribute."

现在,绝对没有 ComplexTypeX 方法定义为网络服务的一部分,所以我只能假设 .NET(或至少 wsdl.exe)不允许您使用跨多种方法返回相同类型的复杂(用户定义)类型的 Web 服务……对吗?

最佳答案

我遇到了类似的问题,这是我发现的:

我定义了一个复杂类型作为响应返回:

public class FooResponse {...}

[WebMethod]
public FooResponse Foo() {...}

请注意,此处 Foo/Foo+Response 的确切名称配对很重要。当我如下更改方法名称时,问题就消失了:

public class FooResponse {...}

[WebMethod]
public FooResponse Fooxxx() {...}

我认为正在发生的事情是 .NET 正在尝试使用名为 FooResponse 的元素自动包装来自 Foo 方法的响应。使用与要返回的对象相同的名称会产生歧义。尝试更改响应对象的名称或方法的名称以避免此冲突。

关于C# 网络服务客户端 : multiple web-service methods with same (complex) return type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580042/

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