c# - .Net Core 3.1 导入 WSDL 错误 - 如何解决?
问题描述
我正在尝试将一些服务器代码从 .Net 4.7 迁移到 .Net Core 3.1,以便我们可以在 Linux 主机上运行。
有两个使用 SOAP 连接的服务。一个移植了零更改,但另一个在使用 WSDL 文件导入时出错:
http://uat.risc.enexusrental.co.uk/SOAP/IndividualService.php?wsdl
我不是 SOAP 专家,并且只使用过通过导入 WSDL 文件生成的代码,因此这些错误对我来说意义不大。
无法导入 wsdl:port 详细信息:导入 wsdl:port 所依赖的 wsdl:binding 时出错。wsdl 的 XPath:binding: wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpPost'] 错误源的 XPath: //wsdl:定义[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpPost'] 无法导入 wsdl:binding详细信息:未处理命名空间“http://schemas.xmlsoap.org/wsdl/http/”中所需的 WSDL 扩展元素“绑定”。错误源的 XPath://wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpPost'] 无法导入 wsdl:port 详细信息:导入 wsdl:port 所依赖的 wsdl:binding 时出错。wsdl:binding 的 XPath: //wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] XPath 到错误源: // wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpGet'] 无法导入 wsdl :绑定详细信息:未处理命名空间“http://schemas.xmlsoap.org/wsdl/http/”中所需的 WSDL 扩展元素“绑定”。错误源的 XPath://wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] //wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] XPath 到错误源://wsdl:definitions[@targetNamespace ='http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpGet'] 无法导入 wsdl:binding 详细信息:必需未处理来自命名空间“http://schemas.xmlsoap.org/wsdl/http/”的 WSDL 扩展元素“绑定”。错误源的 XPath://wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] //wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] XPath 到错误源://wsdl:definitions[@targetNamespace ='http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpGet'] 无法导入 wsdl:binding 详细信息:必需未处理来自命名空间“http://schemas.xmlsoap.org/wsdl/http/”的 WSDL 扩展元素“绑定”。错误源的 XPath://wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] 定义[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpGet'] 无法导入 wsdl:binding详细信息:未处理命名空间“http://schemas.xmlsoap.org/wsdl/http/”中所需的 WSDL 扩展元素“绑定”。错误源的 XPath://wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] 定义[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpGet'] 无法导入 wsdl:binding详细信息:未处理命名空间“http://schemas.xmlsoap.org/wsdl/http/”中所需的 WSDL 扩展元素“绑定”。错误源的 XPath://wsdl:definitions[@targetNamespace='http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet']
为了简化调试,我创建了简单的命令行应用程序,一个用于 .Net 4.7,另一个用于 Core 3.1。
导入对 .Net 4.7 非常有效,我可以调用该服务(如预期的那样)。
为 Core 3.1 导入会出现上述错误,并且在调用客户端初始化时会返回以下错误:
Client.Channel = 'Client.Channel' 引发了“System.ServiceModel.CommunicationObjectFaultedException”类型的异常
手动使用 svcutil.exe 导入时出现相同的错误。
谷歌搜索 3 天后,我不再继续,因为每个问题似乎都不一样,而且没有一个解决方案有效。
有人会好心解释这些错误的实际含义吗(我不是 SOAP 专家),如果可能的话,我需要做些什么来解决它们?
解决方案
将 WSDL 下载到文件并通过删除相应的wsdl:binding
和wsdl:port
元素手动删除不受支持的 GET 和 POST 绑定。然后,您可以使用工具(dotnet-svcutil
或 Visual Studio / IDE)生成客户端代码(服务参考)。
--- a/service.wsdl
+++ b/service.wsdl
@@ -286,37 +286,6 @@
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:binding name="IndividualServiceHttpGet" type="tns:IndividualServiceHttpGet">
- <http:binding verb="GET" />
- <wsdl:operation name="SearchByLastNameAndDateOfBirth">
- <http:operation location="/SearchByLastNameAndDateOfBirth" />
- <wsdl:input>
- <http:urlEncoded />
- </wsdl:input>
- <wsdl:output>
- <mime:mimeXml part="Body" />
- </wsdl:output>
- </wsdl:operation>
- <wsdl:operation name="SearchByDrivingLicenceNumber">
- <http:operation location="/SearchByDrivingLicenceNumber" />
- <wsdl:input>
- <http:urlEncoded />
- </wsdl:input>
- <wsdl:output>
- <mime:mimeXml part="Body" />
- </wsdl:output>
- </wsdl:operation>
- <wsdl:operation name="Get">
- <http:operation location="/Get" />
- <wsdl:input>
- <http:urlEncoded />
- </wsdl:input>
- <wsdl:output>
- <mime:mimeXml part="Body" />
- </wsdl:output>
- </wsdl:operation>
- </wsdl:binding>
- <wsdl:binding name="IndividualServiceHttpPost" type="tns:IndividualServiceHttpPost">
<http:binding verb="POST" />
<wsdl:operation name="SearchByLastNameAndDateOfBirth">
<http:operation location="/SearchByLastNameAndDateOfBirth" />
@@ -354,11 +323,5 @@
<wsdl:port name="IndividualServiceSoap12" binding="tns:IndividualServiceSoap12">
<soap12:address location="http://uat.risc.enexusrental.co.uk/SOAP/IndividualService.php" />
</wsdl:port>
- <wsdl:port name="IndividualServiceHttpGet" binding="tns:IndividualServiceHttpGet">
- <http:address location="http://uat.risc.enexusrental.co.uk/SOAP/IndividualService.php" />
- </wsdl:port>
- <wsdl:port name="IndividualServiceHttpPost" binding="tns:IndividualServiceHttpPost">
- <http:address location="http://uat.risc.enexusrental.co.uk/SOAP/IndividualService.php" />
- </wsdl:port>
</wsdl:service>
</wsdl:definitions>
推荐阅读
- tsql - 如何从存储过程中返回两个结果集?
- javascript - HTML5 按钮 onClick 函数
- ionic-framework - 本地通知插件在 Ionic App 中不起作用
- spring-boot - 使用相应的消息头键值设置 SFTP 配置属性值
- javascript - Konvajs 取消拖动事件
- mongodb - Mongodb得到信号15(终止),将在当前cmd结束后终止centos 7.5
- swift - 将当前时间格式设置为 yyyy-MM-dd
- vb.net - 从字符串“”到类型“Double”的转换对于新 ID 无效
- sql-server - 从 db2 获取前 n 到 n 行
- python - 使用python分割字符串数据中的错误