Код веб-службы Python:
import web from soaplib.wsgi_soap import SimpleWSGISoapApp from soaplib.service import soapmethod from soaplib.serializers import primitive as soap_types urls = ("/hello", "HelloService", "/hello.wsdl", "HelloService", ) render = web.template.Template("$def with (var)\n$:var") class SoapService(SimpleWSGISoapApp): """Class for webservice """ @soapmethod(soap_types.String,_returns=soap_types.String) def hello(self,message): """ Method for webservice""" return "Hello world "+message class HelloService(SoapService): """Class for web.py """ def start_response(self,status, headers): web.ctx.status = status for header, value in headers: web.header(header, value) def GET(self): response = super(SimpleWSGISoapApp, self).__call__(web.ctx.environ, self.start_response) return render("\n".join(response)) def POST(self): response = super(SimpleWSGISoapApp, self).__call__(web.ctx.environ, self.start_response) return render("\n".join(response)) app=web.application(urls, globals()) if __name__ == "__main__": app.run()
Код PHP:
<?php @ini_set("soap.wsdl_cache_enabled", "0"); $client = new SoapClient('http://localhost:8080/hello.wsdl'); echo("<pre>"); var_dump($client->__getFunctions()); echo("</pre>"); $params = array('World'); try { print_r($client->__soapCall('hello', $params)); } catch (SoapFault $exception) { echo $exception; } ?>
Когда я запускаю свой PHP-код, он сообщает информацию ниже
Исключение SoapFault: [helloFault] hello () принимает ровно 2 аргумента (1 задано) в C: \ website \ cosmetics \ src \ test02.php: 15 Трассировка стека: # 0 C: \ website \ cosmetics \ src \ test02.php ( 15): SoapClient -> __ soapCall ('hello', Array) # 1 {main}
Как решить эту проблему? Благодарю.
Не уверен, что такое SoapClient, но похоже, что ему нужен еще один аргумент. Что говорит документация?