0

我有一个肥皂服务器,我一直作为独立应用程序运行,即只需执行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文件进行的更改。

4

1 回答 1

3

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

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

然后将您的脚本放在对 apache 之类的安全位置,/usr/local/www/wsgi-scripts/并在您的可用站点中添加一个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()

如果您需要更多信息,请参阅wsgi in simple soap 文档mod_wsgi 指南

于 2014-04-17T09:03:15.770 回答