我有一个肥皂服务器,我一直作为一个独立的应用程序运行,即只需执行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
文件中包含我需要进行的更改。
答案 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.location
和dispatcher.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 soap和the mod_wsgi guide。