无法在WSDL中找到<definitions>

时间:2017-08-02 08:34:39

标签: web-services soap wsdl

我尝试开发我的第一个SOAP Web服务,但是当我尝试使用wizdl打开我的WSDL时,我遇到了错误。我收到了这个错误:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>WSDL</faultcode>
<faultstring>
SOAP-ERROR: Parsing WSDL: Couldn't find <definitions> in 
'http://localhost/testSolution/test.wsdl'
</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

这是我的代码:testSolution.php:

 <?php

class Ws{

  function getString()
  {
    return "TESTASTOS";
  }
}

ini_set("soap.wsdl_cache_enabled", 0);

$serversoap = new SoapServer("http://localhost/testSolution/test.wsdl");

$serversoap->setClass("Ws");

$serversoap->handle();

?>

和test.wsdl:

<?xml version="1.0" encoding="iso-8859-1"?>
<definitions
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl"

  targetNamespace="urn:serviceTestwsdl"
  xmlns:tns="urn:serviceTestwsdl"
>


<types>
<xsd:schema targetNamespace="urn:serviceTestwsdl"/>
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
</types>

<message name="getStringRequest">
</message>
<message name="getStringResponse">
<part name="return" type="xsd:string" />
</message>

<portType name="serviceTestPortType">

<operation name="getString">
  <documentation>Récupère un string</documentation>
  <input message="tns:getStringRequest"/>
  <output message="tns:getStringResponse"/>
</operation>
</portType>


<binding name="serviceTestBinding" type="tns:serviceTestPortType">

 <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
 <operation name="getString">
  <soap:operation soapAction="urn:serviceTestwsdl#getString" style="rpc"/>
  <input>
    <soap:body use="encoded" namespace="urn:serviceTestwsdl" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  </input>
  <output>
    <soap:body use="encoded" namespace="urn:serviceTestwsdl" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  </output>
</operation>
</binding>

<service name="serviceTest">
<port name="serviceTestPort" binding="tns:serviceTestBinding">
  <soap:address location="http://localhost/testSolution/testSolution.php"/>
</port>

</service>
</definitions>

主要目标是通过在字符串上创建一个小的hello世界来了解soap webservice的工作原理。

非常感谢您的帮助

的问候。迪迪埃

1 个答案:

答案 0 :(得分:0)

您需要添加&#34; wsdl&#34; test.wsdl中的前缀如<wsdl:definitions>。也是该参数中的第一级元素:

<wsdl:types>...</wsdl:types>
<wsdl:operation>...</wsdl:operation>

...等

这将允许您加载wsdl。