问题
I am making a simple web service for communication between two sites I own.
Since it is only a basic application, I've been working without a WSDL file, so in non-WSDL mode
as the PHP manual calls it.
This is basically what the client-side looks like:
$client = new SoapClient(null, array('location' => $location, 'uri' => '', 'trace' => TRUE));
$res = $client->__soapCall('myFunc', array($param));
On the server-side, I have a function called myFunc
:
$soap = new SoapServer(null, array('uri' => ''));
$soap->addFunction('myFunc');
//Use the request to invoke the service
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$soap->handle();
}
When I actually try invoking the myFunc
function, I get and error:
Function 'ns1:myFunc' doesn't exist
For some reason, the soap server is prepending ns1:
to the function name!
Using $client->__getLastRequest()
, I get:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="" 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/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:getTopElement>
<param0 xsi:type="xsd:string">rightcolBox</param0>
</ns1:getTopElement>
</SOAP-ENV:Body>
I'm not a SOAP expert, but it seems to me that the client is causing the error in making the request - or is the server misinterpreting it?
How can I fix this issue?
回答1:
I had the same problem. When I set SoapClient options' uri to not null, the problem was solved.
$client = new SoapClient(null, array('location' => $location, 'uri' => 'foo', 'trace' => TRUE));
Yes, it can be any string, even "foo" as in this example.
来源:https://stackoverflow.com/questions/27745651/issues-with-soap-in-non-wsdl-mode