Wie kann ich HTTP-Anforderung von SQL server?
Wollte ich senden Sie eine HTTP-Anforderung von SQL server auf dem Tomcat-server. Ich habe installiert den SQL server express 2012 und nicht .NET-Anwendung, die in Tomcat-server. Ich habe durch das wie Stellen Sie eine HTTP-Anforderung von SQL server
So wie es in dem obigen Artikel, "Das COM-Objekt WinHttp.WinHttpRequest.5.1 muss auf dem server installiert werden, einige typische Variationen sind WinHttp.WinHttpRequest.5".
Ich habe heruntergeladen winhttp.zip aus der winhttp download-link, gefunden winhttp.dll in den zip-Ordner und klebte es in C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn
wie vorgeschlagen, in diesem msdn-link.
Folgenden, die gleichen Ratschläge, die ich durchgeführt habe folgende Zeile in SSMS:
sp_addextendedproc 'GetHttp',
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn\winhttp.dll';
Habe ich auch ausgeführt, den folgenden code in SSMS, wie gesagt, in "eine HTTP-Anforderung von SQL server-link":
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
Dann bekomme ich die Fehlermeldung
Msg 2010, Ebene 16, Status 1, Prozedur GetHttp, Zeile 2
Nicht durchführen, alter on 'GetHttp' denn es ist ein nicht kompatibler Objekttyp.
Ich weiß nicht, wie Aufruf der Funktion zum senden der HTTP-Anforderung. Ich nehme an, es ist so etwas wie das GetHttp('http://www.google.co.in/')
.
Was bin ich?
- Nicht. Einfach nicht. Dies ist nicht das, was SQL-Server vorgesehen ist.
- Dies ist ein klassisches "wenn man einen hammer hat, sieht man die Nägel" - Konzept, das NICHT zu tun
- Prajdic meine Forderung ist, es gibt zwei verschiedene Datenbanken auf verschiedenen Servern(A und B) und einen tomcat-server-Anwendung. Wenn es irgendeine änderung in der DB EIN, die es sendet http-Anfrage an den tomcat-server-Anwendung, Anwendung in tomcat-server, Berechnung und Speicherung von Daten in DB B. Also hier muss ich den Aufruf der Anwendung von sql server, Da die Benutzer nicht ganz haben Zugriff auf app-tomcat-server.
- Schlagen Sie mich auf andere Ideen.
- Check-out powershell - es hat Befehle für den Zugriff auf die Webseite und kann aufgerufen werden von sql server
- Kannst du nicht das mit den verknüpften Servern?
- soweit ich das verstanden habe Verbindungsserver ist mehr über die Kommunikation zwischen Datenbank-Server. aber hier, was ich will, ist die Kommunikation zwischen Datenbank-server und Applikations-server.
- Okay, ich dachte, Sie wollten zum aktualisieren von Daten auf die anderen DB-server, wenn es auf dem anderen verändert wurde
- Wie pro meine Kenntnisse über powershell die Automatisierung verschiedener Aufgaben, wie kann ich das senden von http-request zu remote-server von Powershell dann. Wenn ich falsch korrigiert mich.
- Wie jeder andere sagte, das ist eine schlechte Idee. SQL-Server-query-Benachrichtigungen, damit die Anwendung weiß, wenn die Daten geändert hat, aber es sieht nicht wie JDBC unterstützt. Sie können die application-server-poll-DB für Veränderungen.
- Wie @jtseng erwähnt, Sie könnte möglicherweise haben die app Umfrage für änderungen, evtl. mit einer "receive from" - Abfrage wie hier beschrieben: msdn.microsoft.com/en-us/library/ms130764.aspx
- Wenn ich die Abfrage Benachrichtigung, dann kann ich Sie nicht initialisieren app von tomcat-server aus dem sql server. Gibt es irgendeine andere Idee zu initialisieren app von sql server als http-request.
- Powershell hat: Invoke-WebRequest und Invoke-RestMethod
- Kann jemand erklären, warum es eine schlechte Idee, es zu tun auf diese Weise. Ich merke, dass es ein Sicherheitsrisiko zu ermöglichen, SQL-server, Active-X-Zugriff. Klar wäre es immer ein vorrangiges Anliegen, die option gar nicht möglich wäre. Könnte dieser hack gerechtfertigt sein, wenn ein Unternehmen verwendet es nur einmal oder zweimal, und nicht noch eine eigene Powershell-Fähigkeiten "hammer" als jemand, der eloquent oben?
- Um klar zu sein, ich bin echt Fragen, für weitere Informationen über was ist Los mit ihm, anstatt zu versuchen, einen Punkt zu machen.
- Zum Beispiel: in meinem Unternehmen werden wir nicht ändern können .NET-code, aber wir können erstellen, speichern von Prozeduren und Triggern, so dass das einzige, was zu tun ist, das aufrufen der web-Dienst aus dem sql-server.
- Ich habe getan, SOAP-POST-Aufrufe von DB2, bevor die auf Unternehmensebene zu vermeiden, schreiben einen Stapel von Programmen, das gleiche zu tun. Sehen Sie Ihre Sicherheit, aber wenn, dass ist nicht das, was der SQL-engine ist - warum kann es tun, es [jetzt]?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekam ich eine andere Antwort als gut. Erstellt habe ich die Prozedur wie folgt
Ich die gespeicherte Prozedur aufgerufen, die mit url
Danke Jungs machen mich diese Arbeit.
SQL Server blocked access to procedure 'sys.sp_OACreate' of component 'Ole Automation Procedures' because this component is turned off as part of the security configuration for this server.
Bekam ich Antwort von powershell. Was ich gemacht habe ist, öffnen Sie das powershell in sql server dann Tat ich, führen Sie die folgenden code in der powershell.
Wirklich geholfen hat mir @niren.
Dachte, ich würde post meine änderung ein, legt es in scalar-Funktion und ermöglicht es Ihnen, die service-Antwort. Einzige Nachteil ist, dass die Skalare funcs nicht raiserrors es gibt also etwas zu denken, fangen anderswo.
Gemacht, dieses monster für meine eigenen Bedürfnisse