一、發布WebService,服務的內容是通過手機號碼查詢使用者姓名
二、編寫預存程序
create procedure [dbo].[proc_CallWebService]@parameter varchar(20)asbegin declare @obj int declare @url varchar(200) declare @response varchar(5000) set @url='http://localhost/zyr/WebServiceDemo.asmx/GetUserNameByMobile?mobile='+@parameter+'' exec sp_OACreate 'MSXML2.ServerXMLHttp',@obj out exec sp_OAMethod @obj,'Open',null,'GET',@url,false exec sp_OAMethod @obj,'send' exec sp_OAGetProperty @obj,'responseText',@response out select @response [response] exec sp_OADestroy @objend
說明:
sp_OACreate 建立 OLE 對象執行個體。
- 第一個參數為 OLE 對象的程式標識符(ProgID)或類別識別項(CLSID)。
- 第二個參數為返回的對象令牌,必須是資料類型為 int 的局部變數,在後面的方法中都要用到對象令牌。輸出參數,必須加 OUT 或 OUTPUT。
sp_OAMethod 調用 OLE 對象的方法。
- 第一個參數為對象令牌。
- 第二個參數為方法名稱。
- 第三個參數為方法的傳回值,如果方法返回的是對象,則該參數類型為 int。輸出參數,必須加 OUT 或 OUTPUT。
- 第四個及以後的參數為方法的參數值,如果方法的參數是輸出參數,則要加上 OUT 或 OUTPUT。
- sp_OAMethod 也可用來擷取屬性值。
sp_OAGetErrorInfo 擷取 OLE 自動化錯誤資訊。
- 第一個參數為對象令牌。
- 第二個參數為錯誤資訊的來源。輸出參數,必須加 OUT 或 OUTPUT。
- 第三個參數為錯誤的描述。輸出參數,必須加 OUT 或 OUTPUT。
sp_OADestroy 釋放已建立的 OLE 對象。
另外,sp_OAGetProperty 擷取 OLE 對象的屬性值,sp_OASetProperty 將 OLE 對象的屬性設定為新值,sp_OAStop 停止伺服器範圍內的 OLE 自動化預存程序執行環境。這些都比較簡單。
三、執行預存程序
exec [dbo].[proc_CallWebService] '1526022****'
結果如下:
<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://app.cloud-erp.cn/">巫燕華</string>
四、可能出現的錯誤
1、問題一
解決方案:
可以使用 sp_configure 系統預存程序來查看和更改 Ole Automation Procedures 選項的當前值。
查看 OLE Automation Procedures 的當前設定。
EXEC sp_configure 'Ole Automation Procedures';GO
啟用 OLE Automation Procedures。
sp_configure 'show advanced options', 1;GORECONFIGURE;GOsp_configure 'Ole Automation Procedures', 1;GORECONFIGURE;GO
2、問題二
解決方案:
在webservice的 <system.web> 節點下加入
<webServices> <protocols> <add name= "HttpPost" /> <add name= "HttpGet" /> </protocols></webServices>