为啥 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”项目看起来有点奇怪?