gpt4 book ai didi

sql - 上下文 sp_OAMethod 'send' 中的 msxml3.dll

转载 作者:行者123 更新时间:2023-12-04 20:04:54 36 4
gpt4 key购买 nike

Win2003 + SQL Server 2005 的工作代码在 Win2012 + SQL Server 2012 sp1 下不起作用。

唯一的~真实的solution我发现是:

I copied C:\Windows\System32\msxml3.dll from a Server 2008 to the same dir on a server 2012. Problem on 2012 server solved, sending with POST and GET working fine.



但是由于我无法修改服务器并且 msxml3.dll 和 msxml6.dll 都被锁定 - 我需要了解什么是错误的并以其他方式应用。

获取soap web服务的代码和往常一样简单:
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,备注“发送”失败。 The parameter is incorrect .

当然 Ole Automation Procedures已启用。

最佳答案

我在整个周末偶然发现了这个令人讨厌的问题。我个人觉得“替换 DLL”的解决方法很糟糕,所以我尽力想出一个更安全的解决方案......幸运的是,我实际上找到了其中的两个。

解决方案 1

应用以下 MS HotFix,可永久修复该问题:

  • https://support.microsoft.com/en-us/help/2968741/error-0x80070057-when-sql-server-communicates-to-a-web-server-using-st

  • (阅读帖子以获取更多信息并通过 MS 安全 channel 通过电子邮件请求修补程序)

    解决方案 2

    如果您不能应用 HotFix,您仍然可以通过在发出 SEND 命令时使用稍微不同的语法来完成工作。取而代之的是:
    Exec @ErrCode=sp_OAMethod @Object, 'send',null,'your-data';

    做这个:
    Exec @ErrCode=sp_OAMethod @Object, 'send("your-data")';

    它适用于任何类型的 HTTP 请求数据:JSON、XML 甚至用于标准 POST 请求的 application/x-www-form-urlencoded。缺点是这种语法非常难看……而且您必须以这种方式更改所有存储过程。

    有关该问题的更多信息,您也可以 read this post在我的博客上。

    关于sql - 上下文 sp_OAMethod 'send' 中的 msxml3.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26765782/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com