Настраивая веб-сервис на моем сервере Symfony, я следую этому руководству: https://symfony.com/doc/current/controller/soap_web_service.html Приведенный пример работает хорошо, с этой привет-функцией:
public function hello($name) { return 'Hello, '.$name; }
Итак, я попытался завершить этот веб-сервис с помощью следующей функции:
public function bye($name) { return 'Goodbye, '.$name; }
А вот мой 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:tns="urn:arnleadservicewsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:helloservicewsdl"> <types> <xsd:schema targetNamespace="urn:hellowsdl"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" /> </xsd:schema> </types> <message name="helloRequest"> <part name="name" type="xsd:string" /> </message> <message name="helloResponse"> <part name="return" type="xsd:string" /> </message> <message name="byeRequest"> <part name="name" type="xsd:string" /> </message> <message name="byeResponse"> <part name="return" type="xsd:string" /> </message> <portType name="hellowsdlPortType"> <operation name="hello"> <documentation>Hello World</documentation> <input message="tns:helloRequest"/> <output message="tns:helloResponse"/> </operation> <operation name="bye"> <documentation>Goodbye World</documentation> <input message="tns:byeRequest"/> <output message="tns:byeResponse"/> </operation> </portType> <binding name="hellowsdlBinding" type="tns:hellowsdlPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="hello"> <soap:operation soapAction="urn:arnleadservicewsdl#hello" style="rpc"/> <input> <soap:body use="encoded" namespace="urn:hellowsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:hellowsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="bye"> <soap:operation soapAction="urn:arnleadservicewsdl#bye" style="rpc"/> <input> <soap:body use="encoded" namespace="urn:hellowsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:hellowsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="hellowsdl"> <port name="hellowsdlPort" binding="tns:hellowsdlBinding"> <soap:address location="http://10.0.0.42/esi/soap" /> </port> </service> </definitions>
Функция Hello все еще работает, но каждый раз, когда я вызываю функцию пока, я получаю сообщение об ошибке:
Неустранимая ошибка: исключение Uncaught SoapFault: [Клиент] выглядит так, как будто у нас нет XML
Где я не прав?
Хорошо, сначала я переписал свой WSDL с помощью https://www.wsdl -analyzer.com / . Вот мой новый WSDL:
<?xml version="1.0" encoding="ISO-8859-1"?> <wsdl:definitions name="helloServiceController" targetNamespace="urn:helloServiceControllerwsdl" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn:helloServiceControllerwsdl"> <wsdl:types> <xsd:schema targetNamespace="urn:helloServiceControllerwsdl"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" /> </xsd:schema> </wsdl:types> <wsdl:message name="helloRequest"> <wsdl:part name="name" type="xsd:string"/> </wsdl:message> <wsdl:message name="helloResponse"> <wsdl:part name="return" type="xsd:string"/> </wsdl:message> <wsdl:message name="byeRequest"> <wsdl:part name="name" type="xsd:string"/> </wsdl:message> <wsdl:message name="byeResponse"> <wsdl:part name="return" type="xsd:string"/> </wsdl:message> <wsdl:portType name="helloServicePortType"> <wsdl:operation name="hello"> <wsdl:documentation>Hello World</wsdl:documentation> <wsdl:input message="tns:helloRequest"/> <wsdl:output message="tns:helloResponse"/> </wsdl:operation> <wsdl:operation name="bye"> <wsdl:documentation>Bye World</wsdl:documentation> <wsdl:input message="tns:byeRequest"/> <wsdl:output message="tns:byeResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="helloServiceBinding" type="tns:helloServicePortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="hello"> <soap:operation soapAction="urn:helloServiceControllerwsdl#hello" style="rpc"/> <wsdl:input> <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:input> <wsdl:output> <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="bye"> <soap:operation soapAction="urn:helloServiceControllerwsdl#bye" style="rpc"/> <wsdl:input> <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:input> <wsdl:output> <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="helloService"> <wsdl:port name="helloServicePort" binding="tns:helloServiceBinding"> <soap:address location="http://10.0.0.42/esi/soap"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
После этого он все еще не работал, и даже функция приветствия не работала. Немного потянув за волосы, я просто перезапустил сервер, и это было хорошо. Вероятно, проблема с кешем