python通過webservice接口實現配置下發


項目上要開發一個小工具,通過webservice接口實現配置下發,考慮到python的第三方庫對soap的良好支持,果斷決定用python來完成這一使命。

Python的支持webservice的第三方庫是suds,官網上給出了詳細用法說明,初始化如下

from suds.client import Client
url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'
client = Client(url)
print client

打印后可見到wsdl文檔的所有方法和數據類型,調用具體方法的操作很簡單:

client.service.methodName()

然后就和調用普通函數一樣的傳參和使用函數提供的功能即可。

使用print client.last_received()函數可以看到收到的soap協議內容

但實際應用中,碰到了幾個問題:

1、wsdl文檔不是放在網絡服務端,或為了隱藏wsdl的遠程訪問地址,把wsdl文檔放在本地,對於本地,url處填寫的方式為(以放在C盤為例):

url='file:\\\c:\test.wsdl'

2、僅僅調用服務的方法是非常簡單,但實際應用中,所用到的方法參數往往非常復雜,有些是自定義的數據類型,類似於結構體,我用到的方法,更離譜的是結構體中還包含自定義數據類型的結構體。直接調用client.service.method來傳參數肯定是不行了,參數類型的問題就沒法解決。

怎么辦呢?suds提供了非常好的解決辦法,使用factory工廠對象來初始化對象實例。使用client.factory.create函數創建對象實例后,直接對實例的參數進行初始化。更詳細的說明需參考官方文檔,本人使用的代碼段貼出如下:

def structParamSetting(ParamID,ColumnParamID,RowID,ParamValue,OperType):
ParamItem=client.factory.create('SetParamItem')
GWParamValue=client.factory.create('ParamValue')
GWParamValue.ParamID=ParamID
GWParamValue.ColumnParamID=ColumnParamID
GWParamValue.RowID=RowID
GWParamValue.ParamValue=ParamValue
ParamItem.OperType=OperType
ParamItem.ValueInfo=GWParamValue
return ParamItem

參數結構為ParamItem為自定義數據類型,其中包含ValueInfo和OperType兩個字段,ValueInfo又為GWParamValue自定義數據類型,其中包含ParamID,ColumnParamID,RowID,ParamValue這幾個字段。

使用factory完美解決了傳復雜參數的問題。

主要的難點在於這兩處,其他的都屬於邏輯和算法優化問題,此處不述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM