Win200 + SQL Server 2005中的工作代码无法在Win2012 + SQL Server 2012 sp1下运行。
我找到的唯一〜真实solution是:
我将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
我尝试了MSXML2.XMLHTTP和MSXML2.ServerXMLHTTP(以及.6.0版本)对象。
错误ID:-2147024809,注释'send'失败。 The parameter is incorrect
。
当然Ole Automation Procedures
已启用。
答案 0 :(得分:3)
我在整个周末偶然发现了这个令人讨厌的问题。我个人发现“替换DLL”的解决方法很可怕,所以我尽力提出一个更安全的解决方案......幸运的是,我实际上发现了其中两个。
解决方案1
应用以下MS HotFix,它可以解决问题:
(阅读帖子了解更多信息并通过MS安全渠道通过电子邮件请求修补程序)
解决方案2
如果您无法应用HotFix,则在发出SEND命令时,仍然可以使用稍微不同的语法来完成工作。而不是:
Exec @ErrCode=sp_OAMethod @Object, 'send',null,'your-data';
这样做:
Exec @ErrCode=sp_OAMethod @Object, 'send("your-data")';
适用于任何类型的HTTP请求数据: JSON , XML 甚至 application / x-www-form-urlencoded 用于标准POST请求。缺点是这样的语法非常难看......你必须改变你所有的存储过程。
有关该问题的其他信息,您也可以在我的博客上read this post。
答案 1 :(得分:1)
指定MSXML2.ServerXMLHTTP.3.0而不是6.0。