開篇介紹
Web Service 的用途非常廣幾乎無處不在,像各大門戶網站上的天氣預報使用到的第三方 Web Service API,像手機客戶端和服務器端的交互等都可以通過事先設計好的 Web Service 接口來實現兩個不同平台的信息溝通。
記得第一次做 IPhone 手機客戶端與服務器端交互的 Web Service 接口的時候,由於我們在客戶端開發和服務器端開發都沒有 IOS 平台開發經驗,白天有其它的項目,只能利用晚上的時間不斷嘗試。最終在第三個通宵的時候,嘗試搭建的第3套不同版本的 Web Service 接口終於和 IPhone 手機客戶端成功通訊交互。前兩套 Web Service 接口可以交互,但是在圖片和有些個別地方總有丟數據的情況,所以 Web Service 給我帶來的痛苦熬夜經歷還是記憶猶新。那時還很單純,說讓加班就加班,玩命表現…不過很享受“嘗試,失敗!再嘗試,再推進,再失敗!再嘗試,再推進,再失敗,再推進,成功!!!”“有問題,出現問題一定能解決,再怎么不能解決,最終一定也能解決!”的決心和過程。
后來在一個美國某保險公司的 BI項目中也使用到了 Web Service, 其原因是美國一個保險公司對於他們的客戶信息的隱私保護,還涉及到一些非常敏感的資金結算等業務,這些信息他們不會輕易開放給開發者。因為有一些非常敏感的業務涉及到客戶公司的內部財務結算還有用戶賬戶等信息都是通過客戶 IT 部門提供的 Web Service 接口來實現的。
實現過程
調用的過程實現起來非常的簡單,下面使用美國的一個 ZIP Code Web Service 接口來獲取指定 ZIP Code 的地區信息。

http://www.webservicex.net/uszip.asmx?op=GetInfoByZIP
輸入 US Zip Code,例如 54404 提交后就能看到返回的一個 XML 格式的結果。Wisconsin 州的 Marshfield, 美國中北部的一個小鎮。

下面演示在 SSIS 中使用 Web Service 接口,傳人指定的參數返回相應的結果。
首先,新建一個 HTTP Connection Manager 這個連接的作用是用來連接到 WSDL(Web Services Description Language)的 XML 描述頁面。這個頁面提供了 Web Service API 接口,還有一些參數和返回值的約定。

這里 Web Service 接口的安全性配置可以忽略,但是在實際大多數項目中對 Web Service 接口的使用都用用戶驗證的。
看看這個WSDL描述文件 - http://www.webservicex.net/uszip.asmx?WSDL

我們將在后面使用到這個 Service - USZip 以及它下面的接口方法。
新建一個 Web Service Task,指定剛創建的 HttpConnection。
WSDLFile 這里先創建一個新的空白的 wsdl 文件,然后在這里指向這個文件。
OverwriteWSDLFile - True, 允許覆蓋。
一定要記得點擊 Download WSDL ,這樣就會把上面看到的 XML 信息下載並保存到指定的 WSDL 文件中。

切換到 Input 選項選擇輸入的接口方法和參數。Service 選項會列出所有的服務,服務下面會提供方法,當選擇完方法后會顯示出每個方法需要的參數和類型。在這里我選擇的是 GetInfoByZip 方法,它有一個輸入參數,字符串類型,我使用自定義的變量 VarZipCode 來作為參數傳遞到 Web Service 接口中。

Output 是一個 string 類型的變量,用它來接受 Web Service 接口返回的 XML 格式字符串,里面包含了有關城市和州的信息。

下面先創建一張表,用它來保存通過 ZipCode查詢返回的信息。
IF OBJECT_ID('DEMO_WS_USRegion') IS NOT NULL
DROP TABLE DEMO_WS_USRegion
GO
CREATE TABLE DEMO_WS_USRegion
(
ZipCode NVARCHAR(255),
AreaCode NVARCHAR(255),
[State] NVARCHAR(255),
City NVARCHAR(255),
TimeZone NVARCHAR(255)
)
創建一個 Data Flow, 選擇一個 XML Source 並進行編輯。

在進行這一步之前,一般的操作是在上一步將 Web Service 返回的 XML 輸出到一個 XML 文件,然后在這里指定一下 XML 文件的路徑地址,然后點擊 Generate XSD 產生 xsd 文件。
在這個例子中我省略了對這些步驟的描述,這里選擇的 Data access mode 是從一個變量中讀取的,這個變量是前面出現的 VarCityInfo。
看看 Columns 中,返回的對 XML 輸出解析出來的列。

Source 指定好了,后面的就容易辦了,拖放一個 OLE DB Destination 控件,指定相關的目標表並關聯映射到 XML 源的輸出列。

保存並執行 Package,檢查數據庫,輸出正確。

Package 變量信息

如果有一個 List 存放所有的 US ZipCode, 那么可以循環調用 Web Service 接口將所有的跟 Zip Code 相關的城市信息都可以一次性加載到數據表中。
更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。
