2008-12-30 73 views

回答

0

服務代理可能提供的那種功能,你正在尋找在這裏。

0

正如AntiSanta所說,使用CLR存儲過程是可能的。真正的問題是你是否可以完全避免它。從存儲過程中調用Web服務會感覺到顛倒。理想情況下,你會有一些其他服務/應用程序/圖層同時調用存儲過程和Web服務。可能存儲的proc返回Web服務的參數值,並且在WS調用完成後提交本地事務。

這將使得調試,部署和支持在長期運行中變得更簡單,並且將存儲的proc和web服務之間的直接引用分開。

+0

你有任何其他建議?我有一個Access後端(用VBA編寫的adp程序),並帶有一個sql後端。我想從訪問中調用web服務,但不想使用com插件。我打電話給遠程服務器(headoffice)上的webserivce,它給我一個採購訂單號。 – MartGriff 2008-12-30 14:12:42

0

在SQL Server 2000及更高版本上(如果CLR未啓用),如果您有用於Web服務的現有COM包裝,則可以通過存儲過程(sp_OACreate,sp_OAMethod等)使用COM。

0

這是我的代碼,工作。

exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT 
if @hr < 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp failed',16,1) 
return end 
exec @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @UrlString, false 
if @hr <0 begin set @msg = 'sp_OAMethod Open failed' goto eh end 
exec @hr = sp_OAMethod @obj, 'send' 
if @hr <0 begin set @msg = 'sp_OAMethod Send failed' goto eh end 
exec @hr = sp_OAGetProperty @obj, 'status', @status OUT 
if @hr <0 begin set @msg = 'sp_OAMethod read status failed' goto eh end 
if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +str(@status) goto eh end 
exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT 
if @hr <0 begin set @msg = 'sp_OAMethod read response failed' goto eh end 
exec @hr = sp_OADestroy @obj 
select @response 

......

誒:

exec @hr = sp_OADestroy @obj 
Raiserror(@msg, 16, 1) 
Return