Issues with SOAP in non-WSDL mode

余生长醉 提交于 2020-01-23 12:37:19

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!