Chciałem wysłać żądanie HTTP z serwera SQL do serwera Tomcat. Zainstalowałem aplikację SQL Express 2012 Express i inną .NET na serwerze Tomcat. Przeszedłem przez to jak Make a HTTP request from SQL server Jak mogę utworzyć żądanie HTTP z serwera SQL?
Jak napisano w powyższym artykule, "Obiekt COM WinHttp.WinHttpRequest.5.1 musi być zainstalowany na serwerze, niektóre typowe odmiany to WinHttp.WinHttpRequest.5". Pobrałem winhttp.zip z winhttp download link, znalazłem plik winhttp.dll w folderze zip i wkleiłem go w C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn
, jak zasugerowano w tym msdn link.
następstwie tej samej rady, mam wykonany następujący wiersz w SSMS:
sp_addextendedproc 'GetHttp',
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn\winhttp.dll';
I wykonany również następujący kod w SSMS jak powiedział w „Złóż żądania HTTP z łącza serwera SQL”:
Alter function GetHttp
(
@url varchar(8000)
)
returns varchar(8000)
as
BEGIN
DECLARE @win int
DECLARE @hr int
DECLARE @text varchar(8000)
EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OADestroy @win
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
RETURN @text
END
Następnie pojawia się błąd
Nie mam pojęcia, jak wywołać funkcję wysyłania żądania HTTP. Zakładam, że jest to coś takiego:Msg 2010, Level 16, State 1, Procedura GetHttp, Linia 2
Nie można wykonać zmiany na "GetHttp", ponieważ jest to niezgodny typ obiektu.
GetHttp('http://www.google.co.in/')
.
Czego mi brakuje?
Nie. Po prostu nie rób tego. Nie jest to przeznaczenie SQL Server. –
To jest klasyczny "kiedy masz młotek, wszystko co widzisz to gwoździe", NIE rób tego – SQLMenace
@ Mladen Prajdic moim wymaganiem jest, że istnieją dwie różne bazy danych na różnych serwerach (A i B) i jedna aplikacja serwera tomcat . Jeśli jest jakakolwiek modyfikacja w DB A, to wysyła żądanie http do aplikacji serwera tomcat, aplikacja na serwerze tomcat wykonuje obliczenia i zapisuje dane w DB B. Tak więc muszę wywołać aplikację tylko z serwera sql, ponieważ użytkownik nie ma dostępu do aplikacji serwera tomcat. – niren