2014-04-09 48 views
0

我有我已經通過只是單純的執行python mysoapserver.py你如何設置一個pysimplesoap服務器在wsgi上運行在apache2上?

但是運行作爲獨立的應用程序,即一個SOAP服務器,我想它通過使用的Apache2 WSGI進行訪問。

下面是當前的代碼的一些代碼摘錄:

進口:

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文件中進行的更改。

回答

3

WSGI規範說,所有你需要在你的python腳本做的僅僅是暴露你的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> 

它應該工作的罰款假設你已經安裝的mod_wsgi並在PYTHONPATH pysimplesoap。另外請記住,在使用mod_wsgi時,您應該可以使用Apache使用的路徑更改您的dispatcher.locationdispatcher.action。無論您是否使用Apache,這些信息都將保留在您的wsdl定義中。如果您需要了解更多信息請諮詢the doc for wsgi in simple soapthe mod_wsgi guide

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

如果你想繼續運行你的應用程序獨立的可能性,更換您的HttpServer部分

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

與此有關。

+0

感謝您的支持。 但是,我需要添加/替換Apache以便能夠運行此應用程序的代碼是什麼? 我不認爲它是 「從wsgiref.simple_server進口make_server 的httpd = make_server( '',8050,應用程序) httpd.serve_forever()」 那你共享。看起來我仍然將它作爲獨立應用程序運行,而不是使用Apache。 – Phil

+0

@Phil你是對的,我添加了這段代碼,以便保留單獨運行腳本的可能性。對於Apache來運行這個應用程序,你需要的唯一python代碼就是應用程序變量定義。這就是wsgi和mod_wsgi的工作方式 - 「WSGIScriptAlias」指令告訴Apache應該在哪裏查找包含此應用程序定義的腳本以運行。你當然也需要安裝mod_wsgi :)你可以在http://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIScriptAlias上閱讀更多關於它的內容。html – jhnwsk

+0

@Phil我根據你的評論編輯了我的答案,希望它現在更具信息性。 – jhnwsk

相關問題