C# .Net Core 3.1导入WSDL错误-如何解决?

C# .Net Core 3.1导入WSDL错误-如何解决?,c#,.net,.net-core,soap,wsdl,C#,.net,.net Core,Soap,Wsdl,我正在尝试将一些服务器代码从.NET4.7迁移到.NETCore3.1,以便能够在Linux主机上运行 有两个使用SOAP连接的服务。一个已进行了零更改的移植,但另一个在使用WSDL文件导入时出错: 我不是SOAP专家,只使用过通过导入WSDL文件生成的代码,因此错误对我来说并不重要 无法导入wsdl:端口 详细信息:导入wsdl:端口所依赖的wsdl:绑定时出错。 XPath到wsdl:binding:wsdl:definitions[@targetNamespace='1]http://u

我正在尝试将一些服务器代码从.NET4.7迁移到.NETCore3.1,以便能够在Linux主机上运行

有两个使用SOAP连接的服务。一个已进行了零更改的移植,但另一个在使用WSDL文件导入时出错:

我不是SOAP专家,只使用过通过导入WSDL文件生成的代码,因此错误对我来说并不重要

无法导入wsdl:端口 详细信息:导入wsdl:端口所依赖的wsdl:绑定时出错。 XPath到wsdl:binding:wsdl:definitions[@targetNamespace='1]http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpPost'] XPath到错误源://wsdl:definitions[@targetNamespace='1]http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpPost'] 无法导入wsdl:绑定 详细信息:命名空间中所需的WSDL扩展元素“binding”http://schemas.xmlsoap.org/wsdl/http/"没有处理。 XPath到错误源://wsdl:definitions[@targetNamespace='1]http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpPost'] 无法导入wsdl:端口 详细信息:导入wsdl:端口所依赖的wsdl:绑定时出错。 XPath到wsdl:binding://wsdl:definitions[@targetNamespace='1]http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet'] XPath到错误源://wsdl:definitions[@targetNamespace='1]http://uat.risc.enexusrental.co.uk']/wsdl:service[@name='IndividualService']/wsdl:port[@name='IndividualServiceHttpGet'] 无法导入wsdl:绑定 详细信息:命名空间中所需的WSDL扩展元素“binding”http://schemas.xmlsoap.org/wsdl/http/"没有处理。 XPath到错误源://wsdl:definitions[@targetNamespace='1]http://uat.risc.enexusrental.co.uk']/wsdl:binding[@name='IndividualServiceHttpGet']

为了简化调试,我创建了简单的命令行应用程序,一个用于.NET4.7,另一个用于Core3.1

导入对.NET4.7非常有效,我可以调用该服务(如预期的那样)

导入Core 3.1时会出现上述错误,调用客户端初始化时会返回以下错误:

Client.Channel='Client.Channel'引发了类型为'System.ServiceModel.CommunicationObjectFaultedException'的异常

手动使用svcutil.exe导入时会出现相同的错误

在谷歌搜索了3天之后,我再也不能继续下去了,因为每个问题似乎都不一样,而且没有一个解决方案有效


有人能解释一下这些错误的真正含义吗(我不是SOAP专家),如果可能的话,我需要做些什么来解决这些问题?

将WSDL下载到一个文件中,并通过删除相应的
WSDL:binding
WSDL:port
元素手动删除不支持的GET和POST绑定。然后,您可以使用工具(
dotnet svcuti
或visualstudio/IDEs)生成客户机代码(服务引用)

——a/service.wsdl
+++b/service.wsdl
@@ -286,37 +286,6 @@
-  
-    
-    
-      
-      
-        
-      
-      
-        
-      
-    
-    
-      
-      
-        
-      
-      
-        
-      
-    
-    
-      
-      
-        
-      
-      
-        
-      
-    
-  
-  
@@ -354,11 +323,5 @@
-    
-      
-    
-    
-      
-    

这是否回答了您的问题@Gusman感谢您的建议,但我的代码没有XHTPBinding,这似乎是他们的解决方案。没有,但您的问题是相同的,.net core不支持的各种绑定,例如:
/wsdl:binding[@name='IndividualServiceHttpGet']
,所以在尝试导入之前应该从wsdl中删除这些绑定?我是WSDL的新手,所以不确定该做什么。我将此标记为正确答案。通过编辑下载的WSDL文件,我最终发现了这一点,现在它正在工作。让我耽搁了一段时间的是VS在编辑完文件后并没有刷新文件,每次测试编辑后我都不得不重新命名为一个新文件。我自己回来补充这个答案是为了让其他人知道该怎么做(因为很多人似乎都在挣扎),但既然你已经回答了,我就把你的答案标记为正确。非常感谢。
    --- 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>