Ber*_*ard 7 c# xsd wsdl wsdl.exe
我正在努力建立一个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();
Run Code Online (Sandbox Code Playgroud)
在我的Reference.cs文件中,如果我注释掉调用Blah(),Blue()或Foo()中任意两个的所有代码,那么剩余的未注释方法可以被调用没有问题.但是,如果我没有注释掉这三种方法中的一种(比如Blah()和Foo()),那么在实例化 Web服务客户端代码时我会收到以下错误消息:
"Blah方法无法反映出来." "命名空间' http://some.url '中的XML元素'ComplexTypeX' 引用方法和类型.使用WebMethodAttribute更改方法的消息名称,或使用XmlRootAttribute更改类型的根元素."
现在,肯定没有任何ComplexTypeX方法被定义为Web服务的一部分,所以我只能假设.NET(或至少wsdl.exe)不允许您使用返回复杂(用户定义)的Web服务多种方法中相同类型的类型......对吗?
我遇到了类似的问题,这就是我发现的:
我已经定义了一个复杂的类型作为响应返回:
public class FooResponse {...}
[WebMethod]
public FooResponse Foo() {...}
Run Code Online (Sandbox Code Playgroud)
请注意,这里Foo/Foo + Response的确切名称配对非常重要.当我按如下方式更改方法名称时,问题就消失了:
public class FooResponse {...}
[WebMethod]
public FooResponse Fooxxx() {...}
Run Code Online (Sandbox Code Playgroud)
我相信正在发生的事情是.NET试图使用名为FooResponse的元素自动包装来自Foo方法的响应.使用与要返回的对象相同的名称会产生歧义.尝试更改响应对象的名称或方法的名称以避免此冲突.
所以我只能假设.NET(或至少是wsdl.exe)不允许您使用跨多个方法返回相同类型的复杂(用户定义)类型的Web服务......对吗?
这是不正确的。想象一下,如果这是真的,那将是多么痛苦 - 你只能有一个返回 String 的方法,一个返回 Double 的方法,一个返回 SomeObject 的方法,等等......这将是一场噩梦。
我对 .NET 中的 Web 服务不太熟悉,但从您收到的错误来看,听起来您遇到了 XML 命名空间问题 - 也许存在名称冲突。我尝试按照错误消息中的建议修改WebMethodAttribute.
此外,如果您由于某些公司隐私/敏感性问题而无法发布与您遇到的问题相关的代码/文档,您应该发布一个仍能证明您的测试用例的经过净化的版本。几乎所有“敏感”的内容都应该能够归结为更简单的代码片段,该代码片段仍然可以在不泄露任何敏感性的情况下表达您的观点。