SOAPUI 不显示来自 WSDL 的操作

Posted

技术标签:

【中文标题】SOAPUI 不显示来自 WSDL 的操作【英文标题】:SOAPUI Not Showing Operations from WSDL 【发布时间】:2015-02-25 18:24:16 【问题描述】:

我正在努力让 SOAPUI 在我的服务中显示我的操作,我从暴露的 MEX 端点(所以不是手动的)生成我的 WSDL,然后我从生成的 WSDL 创建我的客户端代理。从代码的角度来看,这很好用(如果主机正在运行,我的单元测试通过,如果它关闭,则失败)。

我想使用 SOAPUI 进行一些低级测试,但如果我使用用于生成代理的相同 WSDL,那么它不会显示任何操作(即使 WSDL 正在工作)

生成 WSDL svcutil /target:metadata "net.tcp://localhost:10109/AnimalService"

生成代理 svcutil /t:code ..*.wsdl ..*.xsd /out:Proxy.cs /config:Proxy.config

我认为我做错了什么,任何帮助将不胜感激。

主要的 WSDL

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:i0="http://spikes/WcfCodeFirstExample/services/AnimalService" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://tempuri.org/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" name="AnimalService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:import namespace="http://spikes/WcfCodeFirstExample/services/AnimalService" location="" />
  <wsdl:types />
  <wsdl:service name="AnimalService">
    <wsdl:port name="NetTCPBinding_IAnimalService" binding="i0:NetTCPBinding_IAnimalService">
      <soap12:address location="net.tcp://localhost:10109/AnimalService.svc" />
      <wsa10:EndpointReference>
        <wsa10:Address>net.tcp://localhost:10109/AnimalService.svc</wsa10:Address>
      </wsa10:EndpointReference>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

次要 WSDL(第一次引用)

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:i0="Spike.Contracts.Services" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://spikes/WcfCodeFirstExample/services/AnimalService" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" targetNamespace="http://spikes/WcfCodeFirstExample/services/AnimalService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsp:Policy wsu:Id="NetTCPBinding_IAnimalService_policy">
    <wsp:ExactlyOne>
      <wsp:All>
        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1"></msb:BinaryEncoding>
        <wsaw:UsingAddressing></wsaw:UsingAddressing>
      </wsp:All>
    </wsp:ExactlyOne>
  </wsp:Policy>
  <wsdl:import namespace="Spike.Contracts.Services" location="" />
  <wsdl:types />
  <wsdl:binding name="NetTCPBinding_IAnimalService" type="i0:IAnimalService">
    <wsp:PolicyReference URI="#NetTCPBinding_IAnimalService_policy"></wsp:PolicyReference>
    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
    <wsdl:operation name="GetAvailableAnimalTypes">
      <soap12:operation soapAction="Spike.Contracts.Services/IAnimalService/GetAvailableAnimalTypes" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="AddPetAnimalType">
      <soap12:operation soapAction="Spike.Contracts.Services/IAnimalService/AddPetAnimalType" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
</wsdl:definitions>

请记住,这是生成的 WSDL 和 XSD 不是手动生成的。我尝试了 netTcpbinding 和 basicHttpBinding 配置。很可能是我错误地使用了 SOAPUI,但如果我尝试示例 WSDL (http://www.webservicex.com/CurrencyConvertor.asmx?wsdl),我确实看到了相关的操作,所以我认为我做对了。

我正在使用 SOAPUI 5.0。

【问题讨论】:

你能解决这个问题吗? 不,我决定使用集成单元测试来测试我的操作(放弃了 SOAP UI 作为我的测试套件)。这并不总是可能/可行的,因此需要在某个时候让 SOAP UI 工作。 【参考方案1】:

我遇到了同样的问题,结果发现我使用的是WebHttpBinding 而不是BasicHttpBinding。一旦我切换到使用BasicHttpBinding,所有的操作/方法都会出现在 SoapUI 中。

【讨论】:

我该怎么做? @ed22 它应该在您配置 wcf 服务端点的配置文件中。如果您不使用配置,那么在代码中您将使用BasicHttpBinding 类而不是WebHttpBindingBasicHttpBinding = SOAP 和 WebHttpBinding = REST 所以你必须在 SOAPUI 和你的 wcf 服务中同时使用 REST 或 SOAP 才能工作。【参考方案2】:

以防有人在 6 年后仍然像我一样看这个。在我的情况下,我有几个 WebMethod 调用显示但一个新的 WebMethod 不会显示。跑更新了好几次,SoapUI说更新了133个方法,新的方法还是没有显示。

对我来说,解决方法是删除现有定义,然后添加新定义而不是更新现有定义,然后新方法显示在新定义中。一个简单的解决方案,但不确定为什么更新不起作用。

【讨论】:

以上是关于SOAPUI 不显示来自 WSDL 的操作的主要内容,如果未能解决你的问题,请参考以下文章

soapui中文操作手册----通过您的WSDL请求创建一个测试

webservice接口,用Soapui

没有wsdl,怎么使用soapui测试webservice接口?

soapui中文操作手册----创建一个新的项目

soapui中文操作手册----创建一个新的项目

soapui 破解详细步骤