为啥 Visual Studio 生成的 WSDL 未指定 soap:operation 元素(缺少 wsdl:binding 元素)

Posted

技术标签:

【中文标题】为啥 Visual Studio 生成的 WSDL 未指定 soap:operation 元素(缺少 wsdl:binding 元素)【英文标题】:Why does a Visual Studio generated WSDL not specify soap:operation elements (missing wsdl:binding element)为什么 Visual Studio 生成的 WSDL 未指定 soap:operation 元素(缺少 wsdl:binding 元素) 【发布时间】:2020-09-06 21:55:57 【问题描述】:

背景:我继承了两个由同一个承包商开发的 Web 服务项目。

问题:项目的 WSDL 文件之一加载到 SoapUI 以生成测试套件,但另一个没有。我认为第二个没有,因为它在没有引用“soap:operation”的情况下指定了它的操作。

以下是导入到 SoapUI 的 WSDL 中的 API 方法声明:

<wsdl:operation name="getDutyPreferences">
<soap:operation soapAction="http://tempuri.org/IRT2015WS_Web/getDutyPreferences" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>

这是来自 WDSL 的声明,它不会导入到 SoapUI:

<wsdl:operation name="Login">
<wsdl:input wsaw:Action="http://tempuri.org/IRT2015WS_Web/Login" message="tns:IRT2015WS_Web_Login_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IRT2015WS_Web/LoginResponse" message="tns:IRT2015WS_Web_Login_OutputMessage"/>
</wsdl:operation>

两个 WSDL 都是从 http://localhost:port/SERVICE_NAME.svc?wsdl 下载的

有谁知道为什么这些方法有如此不同的声明?

更新 我注意到元素(这是我需要看到的)在工作 WSDL 文件的元素中:在有问题的文件中,这个元素丢失了。我已更新问题标题以反映这一点。

【问题讨论】:

【参考方案1】:

根据你的描述,上一个是WSDL,下一个是单个WSDL。下图是WCF提供的两个WSDL:

svcutil可以基于第一个链接生成代理类。跨技术时,singleWsdl选项是最安全的。例如在Java中可以使用CXF 3.0的WSDL 2java生成基于single的Java包WSDL,你可以使用jax-ws来创建连接。它们都可以生成代理类。

【讨论】:

感谢您的想法,但是 WSDL 和单个 WSDL 文件中都缺少 元素。(请参阅问题的更新部分)。

以上是关于为啥 Visual Studio 生成的 WSDL 未指定 soap:operation 元素(缺少 wsdl:binding 元素)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Visual Studio 2010 (Intellisense) 会停止生成接口指针?

为啥 clang 生成的二进制文件比 Visual Studio 生成的大

Visual Studio:如何将 wsdl 集成到 Web 服务中?

为啥Visual Studio生成的C++“Hello World”项目看起来有点奇怪?

Visual Studio 在“添加服务引用”时不生成 app.config 内容

visual studio中为啥代码删除了还是执行