你如何设置一个pysimplesoap服务器与wsgi在apache2上运行?

时间:2014-04-09 18:30:31

标签: python soap apache2 wsgi pysimplesoap

我有一个肥皂服务器,我一直作为一个独立的应用程序运行,即只需执行python mysoapserver.py

但是,我希望使用wsgi通过apache2访问它。

以下是当前代码的一些代码摘录:

导入:

from pysimplesoap.server import SoapDispatcher, SOAPHandler, WSGISOAPHandler

代码摘录

dispatcher = SoapDispatcher(
'TransServer',
location = "http://127.0.0.1:8050/",
action = 'http://127.0.0.1:8050/', # SOAPAction
namespace = "http://example.com/sample.wsdl", prefix="ns0",
trace = True,
ns = True)

#Function
def settransactiondetails(sessionId,msisdn,amount,language):
    #Some Code here
    #And more code here
    return {'sessionId':sid,'responseCode':0}

# register the user function
dispatcher.register_function('InitiateTransfer', settransactiondetails,
    returns={'sessionId': str,'responseCode':int}, 
    args={'sessionId': str,'msisdn': str,'amount': str,'language': str})

logging.info("Starting server...")
httpd = HTTPServer(("", 8050),SOAPHandler)
httpd.dispatcher = dispatcher
httpd.serve_forever()

我如何更改上面的代码,以便通过wsgi在apache2上访问它。 您还可以在/etc/apache2/sites-available/default文件中包含我需要进行的更改。

1 个答案:

答案 0 :(得分:3)

wsgi规范说你需要在你的python脚本中做的只是在一个名为application的变量中暴露你的wsgi应用程序,如下所示:

#add this after you define the dispatcher
application = WSGISOAPHandler(dispatcher)

然后将脚本放置在安全的地方,如/usr/local/www/wsgi-scripts/之类的apache,并在您的站点中 - 可用添加WSGIScriptAlias指令,该指令将告诉Apache wsgi脚本处理程序在哪里查找脚本及应运行的应用程序在其中。

WSGIScriptAlias /your_app_name /usr/local/www/wsgi-scripts/your_script_file

<Directory /usr/local/www/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>

假设你在pythonpath中安装了mod_wsgi和pysimplesoap,它应该可以正常工作。还要记住,在使用mod_wsgi时,您应该更改dispatcher.locationdispatcher.action使用Apache使用的路径。无论您是否使用Apache,此信息都将保留在您的wsdl定义中。

如果您希望保持独立运行应用程序的可能性,请更换HTTPServer部分

logging.info("Starting server...")
httpd = HTTPServer(("", 8050),SOAPHandler)
httpd.dispatcher = dispatcher
httpd.serve_forever()

用这个:

if __name__=="__main__":
    print "Starting server..."
    from wsgiref.simple_server import make_server
    httpd = make_server('', 8050, application)
    httpd.serve_forever()

如果您需要更多信息,请参阅the doc for wsgi in simple soapthe mod_wsgi guide