2012-02-08 1 views
2

Python Web Service Code:веб-службы вызова Python с использованием PHP

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}

Как решить эту проблему? Благодарю.

+0

В этом случае полезно посмотреть на WSDL (hello.wsdl). Отправьте его. – dmitry

ответ

1

Не уверен, что такое SoapClient, но похоже, что ему нужен еще один аргумент. Что говорит документация?

+0

документация относится к этой ссылке http://php.net/manual/en/class.soapclient.php Я не могу найти полезной информации в этой документации. –

+0

Не могли бы вы попробовать var_dump() вместо echo для $ exception и дать нам ответ? –

Смежные вопросы