我想在SQL Server 2000中调用来自TSQL的web服务。我尝试使用以下代码:
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get','http://server/ws/service1.asmx/Test', 'false';
Exec sp_OAMethod @Object, 'send';
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT;
Select @ResponseText Resultado;
Exec sp_OADestroy @Object;
为此,我必须启用Ole Automation:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
在我的测试服务器上工作正常,问题是在生产服务器上运行
sp_configure 'Ole Automation Procedures', 1;
我收到以下错误:
配置选项“Ole Automation Procedures”不存在,或者它可能是高级选项。
运行时
exec sp_configure
测试服务器上的不会在生产服务器上显示记录“Ole Automation Procedures”。
我修改代码以捕获错误:
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get','http://server/ws/service1.asmx/Test', 'false';
Exec sp_OAMethod @Object, 'send';
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT;
EXEC sp_OAGetErrorInfo @Object
Select @ResponseText Resultado;
Exec sp_OADestroy @Object;
指令“sp_OAGetErrorInfo EXEC @ Object”返回:(0x8004271A )srv_convert中的错误。
根据Microsoft(link)是SqlServer的问题。因为在我的情况下,webservice的结果超过4000个字符。
如何从TSQL调用Web服务?
答案 0 :(得分:1)
我建议您使用CLR或SSIS包。
答案 1 :(得分:1)
我通过以下方式解决了这个问题:
使用以下代码创建VBScript文件( callWS.vbs ):
if WScript.Arguments.Count = 1 then
Set http = CreateObject("Microsoft.XmlHttp")
http.open "GET", WScript.Arguments(0), FALSE
http.send ""
WScript.Echo http.responseText
else
WScript.Echo "Not was provided the WS address."
end if
然后在TSQL中:
declare @Command varchar(100)
declare @RetInfo varchar(8000)
select @Command = 'cscript c:\callWS.vbs "http://server/ws/service1.asmx/Test"'
print @Command
exec @RetInfo = master.dbo.xp_cmdshell @Command
print @RetInfo
答案 2 :(得分:1)