Я пытаюсь использовать Yii для предоставления веб-сервиса. Сгенерированный wsdl ниже. Я могу успешно использовать веб-сервис из командной строки, но через веб-браузер я получаю
SOAP-ERROR: Encoding: Violation of encoding rules
Я новичок в SOAP, поэтому я не уверен, как решить проблему. Вот код PHP, который я использую для использования веб-службы:
<code><?php
$client=new SoapClient('{url omitted for security}',
array('trace'=>1,'exceptions'=>1));
try {
$result = $client->getPerson(90043412);
var_dump($result);
} catch (SoapFault $fault) {
echo $fault->getMessage() . '<br />';
echo 'REQUEST <br />';
echo '<pre>';
echo $client->__getLastRequestHeaders();
echo $client->__getLastRequest();
echo '
';
echo 'RESPONSE
';
echo '
';
echo $client->__getLastResponseHeaders();
echo $client->__getLastResponse();
echo '
';
echo 'TRACE
';
echo '
';
var_dump($fault->getTrace());
echo '
';
}
?>
Вот WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:PersonControllerwsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" name="PersonController" targetNamespace="urn:PersonControllerwsdl">
<wsdl:types>
<xsd:schema targetNamespace="urn:PersonControllerwsdl">
<xsd:complexType name="Person">
<xsd:all>
<xsd:element name="PIDM" type="xsd:integer"/>
<xsd:element name="FirstName" type="xsd:string"/>
<xsd:element name="MiddleName" type="xsd:string"/>
<xsd:element name="LastName" type="xsd:string"/>
<xsd:element name="PrefFirstName" type="xsd:string"/>
<xsd:element name="CPOBox" type="xsd:string"/>
<xsd:element name="Classification" type="xsd:string"/>
<xsd:element name="Email" type="xsd:string"/>
<xsd:element name="PhotoFile" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getPersonRequest">
<wsdl:part name="PIDM" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="getPersonResponse">
<wsdl:part name="return" type="tns:Person"/>
</wsdl:message>
<wsdl:portType name="PersonControllerPortType">
<wsdl:operation name="getPerson">
<wsdl:documentation></wsdl:documentation>
<wsdl:input message="tns:getPersonRequest"/>
<wsdl:output message="tns:getPersonResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PersonControllerBinding" type="tns:PersonControllerPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getPerson">
<soap:operation soapAction="urn:PersonControllerwsdl#getPerson" style="rpc"/>
<wsdl:input>
<soap:body use="encoded" namespace="urn:PersonControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</wsdl:input>
<wsdl:output>
<soap:body use="encoded" namespace="urn:PersonControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PersonControllerService">
<wsdl:port name="PersonControllerPort" binding="tns:PersonControllerBinding">
<soap:address location="https://localhost/whoswho/person/service?ws=1"/>
</wsdl:port>
</wsdl:service>
</definitions>