2013-08-28 37 views
1

我想知道如何從SQL Server存儲過程使用web服務。我有一個表格,列中指定了用戶的城市和州。我想將此地址作爲參數傳遞給Google Geocoding API Web服務並獲取經緯度。如何從SQL Server存儲過程調用webservice

我已經在c#中成功地使用了這個地理編碼api。但是現在,我想在存儲過程中使用它。

任何人都可以請建議如何做到這一點?或者請給我提供任何鏈接?

任何幫助將不勝感激!

謝謝。

+3

這似乎不是SQL Server本身應該處理的工作 - 這是您在應用程序服務器上用C#編寫的應用程序和/或服務層的工作.... –

回答

0

Omar Frometa舉例說明了如何做到這一點。去這個鏈接 http://www.codeproject.com/Articles/428200/How-to-invoke-a-Web-Service-from-a-Stored-Procedur

總之,使用這些擴展存儲過程:SP_OACreate和SP_OAMethod訪問對象,如MSXML2.ServerXMLHttp。

+1

請添加信息從鏈接 - 如果該鏈接死亡這個答案將變得沒用 – dax

+1

通過推薦使用sp_OA procs鏈接被發現是無用的第二個它張貼。 SQLCLR是更健壯,更安全的技術,並且技術在SQL Server中繼續前進,而sp_OA procs已經過時。 –

+0

@ user3469363 - 嗨感謝您花時間回答問題。非常感謝。我已嘗試鏈接,並沒有迴應。但我不知道它已經過時,但我現在知道。感謝dax和orlando。 – Abe

4

對於這樣的事情,您不需要完整的Web服務實現。您可以使用SQLCLR(SQL Server的.NET集成)將請求提交到URL,並以XML格式返回響應(除非您可以找到一個JSON庫,它將工作而不會將設置爲UNSAFE),然後解析該響應。

請看下面的MSDN網頁:

根據該Google Geocoding API documentation,該API URI應類似格式化爲以下:

https://maps.googleapis.com/maps/api/geocode/xml?address={EscapedAddress}&key={API_KEY} 

只是提交與這些2個變量經由HttpWebRequest與它們適當的值取代,則調用HttpWebRequest.GetResponse,然後致電HttpWebResponse.GetResponseStream。忘記調用CloseDispose方法HttpWebResponse(或在using塊中實例化它)!

其他注意事項:

  • 如果尚未完成,您必須啓用(一次)「CLR集成」在服務器級別:Enabling CLR Integration
  • 不要採取簡單的道路,並將數據庫到TRUSTWORTHY ON。只需使用密碼簽署程序集,然後通過指向已簽名的DLL在master數據庫中創建非對稱密鑰,然後從該非對稱密鑰創建登錄,最後授予該登錄的UNSAFE ASSEMBLY權限。然後你可以設置程序集WITH PERMISSION_SET = EXTERNAL_ACCESS
  • 請勿使用SP_OA *程序作爲advocated by user3469363。這些OLE自動化程序自SQL Server 2005以來已被棄用,並且有希望在某一天(希望很快)被刪除。與SQLCLR相比,它們效率較低,安全性也較低。
相關問題