我已经编写了肥皂服务器,肥皂客户端和wsdl文件。当我调用函数 soap 服务器无法识别输入时。有人可以帮我解决这个问题吗?
WSDL 文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/accounts/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="accounts" targetNamespace="http://www.example.org/accounts/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/accounts/">
<xsd:element name="addAcount">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addAcountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="closeAccount">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="accountNumber" type="xsd:string"></xsd:element>
<xsd:element name="accountHolder" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="closeAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="status" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="addAcountRequest">
<wsdl:part element="tns:addAcount" name="parameters"/>
</wsdl:message>
<wsdl:message name="addAcountResponse">
<wsdl:part element="tns:addAcountResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="closeAccountRequest">
<wsdl:part name="parameters" element="tns:closeAccount"></wsdl:part>
</wsdl:message>
<wsdl:message name="closeAccountResponse">
<wsdl:part name="parameters" element="tns:closeAccountResponse"></wsdl:part>
</wsdl:message>
<wsdl:portType name="accounts">
<wsdl:operation name="addAcount">
<wsdl:input message="tns:addAcountRequest"/>
<wsdl:output message="tns:addAcountResponse"/>
</wsdl:operation>
<wsdl:operation name="closeAccount">
<wsdl:input message="tns:closeAccountRequest"></wsdl:input>
<wsdl:output message="tns:closeAccountResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="accountsSOAP" type="tns:accounts">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addAcount">
<soap:operation soapAction="http://www.example.org/accounts/addAcount"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="closeAccount">
<soap:operation soapAction="http://www.example.org/accounts/closeAccount"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="accounts">
<wsdl:port binding="tns:accountsSOAP" name="accountsSOAP">
<soap:address location="http://localhost:8888/testing/wsdl/service.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
肥皂客户端,在肥皂客户端中,我正在尝试访问关闭帐户功能。该函数有两个参数。
$wsdl = 'http://localhost:8888/testing/wsdl/service.php?wsdl';
$options = array('trace' => TRUE);
$client = new SoapClient($wsdl, $options);
$values = array(
'accountNumber' => 'sdfsd',
'accountHolder' => 'sfsdf'
);
$response = $client->closeAccount($values);
echo "<pre>";
print_r($response);
echo "</pre>";
SOAP 服务器,
class Exam {
function closeAccount($accountNumber, $accountHolder){
$value = array('status'=>$accountNumber);
return $value;
}
}
$server = new SoapServer("http://localhost:8888/testing/wsdl/addAccount.wsdl");
$server->setClass('Exam');
$server->handle();
在肥皂服务器中,当我尝试返回$accountNumber它显示值名称"对象"。如果我尝试访问$accountHolder它会返回空白。
为什么我的 SOAP 服务器无法读取输入值。 请有人帮助我。
您正在向函数传递一个数组,但它需要两个不同的单独参数:
试试这个:
function closeAccount($array){
$value = array('status'=>$array['accountNumber']);
return $value;
}
客户端输入作为"对象数组"接收到服务器 因此,请使用以下方式读取服务器中的值,$array->帐户持有人
function closeAccount($array) {
$value = array('status' => $array->accountHolder);
return $value;
}