当前位置:  开发笔记 > 编程语言 > 正文

C#web-service客户端:具有相同(复杂)返回类型的多个Web服务方法?

如何解决《C#web-service客户端:具有相同(复杂)返回类型的多个Web服务方法?》经验,为你挑选了1个好方法。

我正在努力建立一个Java B2B网络服务的客户端,我想我已经确定了我们已经存在一段时间的问题的原因.不幸的是我无法发布WSDL.

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

举例来说 - 一个定义以下方法的Web服务:

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

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

"Blah方法无法反映出来." "命名空间' http://some.url '中的XML元素'ComplexTypeX' 引用方法和类型.使用WebMethodAttribute更改方法的消息名称,或使用XmlRootAttribute更改类型的根元素."

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



1> Ryan Morlok..:

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

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

public class FooResponse {...}

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

请注意,这里Foo/Foo + Response的确切名称配对非常重要.当我按如下方式更改方法名称时,问题就消失了:

public class FooResponse {...}

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

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有