我想从SQL服务器发送HTTP请求到Tomcat服务器。我已经在Tomcat服务器中安装了SQL Server 2012 Express和非.NET应用程序。我已经通过了Make a HTTP request from SQL server
正如上面的文章中所说,“COM对象WinHttp.WinHttpRequest.5.1必须安装在服务器上,一些典型的变体是WinHttp.WinHttpRequest.5”。我已经从winhttp download link下载了winhttp.zip,在zip文件夹中找到了winhttp.dll,并将其粘贴到C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn
中,就像在msdn link中建议的那样。
根据相同的建议,我在SSMS中执行了以下行:
sp_addextendedproc 'GetHttp',
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn\winhttp.dll';
我还在SSMS中执行了以下代码,如“从SQL Server链接发出HTTP请求”中所述:
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
然后我得到错误
Msg 2010,级别16,状态1,过程GetHttp,第2行
无法对“GetHttp”执行alter,因为它是不兼容的对象类型。
我不知道如何调用函数来发送HTTP请求。我假设它是类似于GetHttp('http://www.google.co.in/')
的东西。
我错过了什么?
7条答案
按热度按时间vfh0ocws1#
我也得到了另一个答案。我创建了如下的过程
我用url调用了存储过程
谢谢你们让我做这个。
aurhwmvo2#
这真的帮助了我@niren。
我想我会把我的修正案,把它放在标量函数,并允许你得到服务响应。唯一的缺点是标量函数不能raiserrors,所以有一些考虑捕捉其他地方。
i2byvkas3#
我通过powershell得到了答案。我所做的是在sql server中打开powershell,然后在powershell中执行以下代码。
yftpprvb4#
为了我自己的需要制造了这个怪物
a2mppw5e5#
这里最灵活的方法是使用CLR用户定义函数,您可以简单地在C#中定义如下:
完整的安装说明在这里-https://github.com/infiniteloopltd/SQLHttp
dgsult0t6#
正确的方法是构建一个CLR,它将包含一个C#代码来发送http/s请求,因为我们想避免内存泄漏和安全问题,这是使用像sp_OACreate这样的旧方法可能导致的。
例如:
使用sp_OACreate不太安全,而CLR可以由您签名和检查。
ubof19bj7#
有了这些代码,您可以通过Httpprequest从网页中读取Html代码或运行SOAP Web服务。
从SQLserver发出HTTP请求。
通过SQL Server发送HTTP请求。
从SQL Server TSQL存储过程调用SOAP Web服务。
将Http响应保存到文件。