2008-12-30 45 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