4

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 (リンク) によると、SqlServer の問題です。私の場合、Webサービスの結果が4000文字を超えているためです。

TSQL から Web サービスを呼び出すにはどうすればよいですか?

4

3 に答える 3

2

同じエラーに出くわしました-「(0x8004271A)srv_convertのエラー」。

char 制限を克服するには、以下のように #tmp テーブルを使用します。

Create table #tmp(dt nvarchar(max))
insert into #tmp 
exec @hr =sp_OAGetProperty @objWinHttp, 'ResponseText'
Select dt from #tmp -- single column/single row.
Drop Table #tmp -- clean up

ソリューション ソース

于 2016-12-28T19:18:16.627 に答える
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
于 2013-01-11T12:21:18.757 に答える
1

T-SQL (SQLCLR なし) から HTTP Web サービスを呼び出したい場合は、ヘルプが必要かもしれません。オブジェクト オートメーション拡張ストアド プロシージャを使用して、XMLHTTP サーバー オブジェクトを自動化できます。

ただし、CLR または SSIS パッケージを使用することをお勧めします。

于 2013-01-10T14:12:13.943 に答える