rev*_*oua 5 sql t-sql soap ole sql-server-2012
Win200 + SQL Server 2005中的工作代码无法在Win2012 + SQL Server 2012 sp1下运行.
我找到的唯一真正的解决方案是:
我将C:\ Windows\System32\msxml3.dll从Server 2008复制到服务器2012上的同一目录.2012服务器问题解决了,发送POST和GET工作正常.
但由于我无法修改服务器并且msxml3.dll和msxml6.dll都被锁定 - 我需要了解错误并以其他方式应用.
代码与往常一样简单,可以抓取肥皂网服务:
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Declare @ErrCode Int;
Exec sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'post','http://example.com/Authentication.asmx','false'
Exec sp_OAMethod @Object ,'setRequestHeader' ,NULL ,'Content-Type' ,'text/xml; charset=utf-8'
Exec sp_OAMethod @Object ,'setRequestHeader' ,NULL ,'SOAPAction' ,'"http://www.example.com/Login"'
Exec @ErrCode=sp_OAMethod @Object, 'send',null,'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<Login xmlns="http://www.example.com/">
<databaseName>db1</databaseName>
<userName>login</userName>
<password>pass</password>
</Login>
</soap:Body>
</soap:Envelope>'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ErrCode,@ResponseText
Exec sp_OADestroy @Object
Run Code Online (Sandbox Code Playgroud)
我尝试了MSXML2.XMLHTTP和MSXML2.ServerXMLHTTP(以及.6.0版本)对象.
错误ID:-2147024809,注释'send'失败.The parameter is incorrect.
当然Ole Automation Procedures是启用了.
我整个周末都偶然发现了这个令人讨厌的问题。我个人发现“替换 DLL”解决方法很糟糕,所以我尽力想出一个更安全的解决方案......幸运的是,我实际上找到了其中两个。
解决方案1
应用以下 MS HotFix,可以永久解决该问题:
(阅读该帖子以获取更多信息,并通过 MS 安全通道通过电子邮件请求修补程序)
解决方案2
如果您无法应用 HotFix,您仍然可以在发出 SEND 命令时使用稍微不同的语法来完成工作。而不是这个:
Exec @ErrCode=sp_OAMethod @Object, 'send',null,'your-data';
Run Code Online (Sandbox Code Playgroud)
做这个:
Exec @ErrCode=sp_OAMethod @Object, 'send("your-data")';
Run Code Online (Sandbox Code Playgroud)
它适用于任何类型的 HTTP 请求数据:JSON、XML甚至用于标准 POST 请求的application/x-www-form-urlencoded。缺点是这样的语法非常难看......并且您必须以这种方式更改所有存储过程。
有关该问题的更多信息,您还可以阅读我博客上的这篇文章。
| 归档时间: |
|
| 查看次数: |
3811 次 |
| 最近记录: |