当前位置: 首页 > 面试题库 >

上下文sp_OAMethod中的msxml3.dll“发送”

车嘉实
2023-03-14
问题内容

Win2003 + 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

我同时尝试了MSXML2.XMLHTTP和MSXML2.ServerXMLHTTP(以及.6.0版本)对象。
错误ID:-2147024809,带有备注“发送”失败。The parameter is incorrect

当然Ole Automation Procedures启用了。


问题答案:

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

解决方案1

应用以下MS HotFix,可以永久解决此问题:

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

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

解决方案2

如果您无法应用HotFix,则在发出SEND命令时,仍可以通过使用稍有不同的语法来完成作业。代替这个:

Exec @ErrCode=sp_OAMethod @Object, 'send',null,'your-data';

做这个:

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

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



 类似资料:
  • 摘自http://developer.android.com/guide/topics/ui/settings.html:

  • 本文向大家介绍React.js中的上下文API,包括了React.js中的上下文API的使用技巧和注意事项,需要的朋友参考一下 React上下文api在版本16.3或最新版本中可以安全地用于生产中。添加上下文api的原因是,如果有一系列子组件,则避免传递prop。 在不使用上下文api的情况下,我们必须将道具传递给所有中间组件。另一种替代解决方案是使用第三方库(例如Redux)来维护中央存储。 了

  • 我在spring TestContext配置的深潜过程中遇到了spring-boot-test问题。 示例项目:github示例项目 我有三个带有bean的Spring配置(-重量级配置,我需要缓存它) 两次然后 只有一次。在我看来,这是可能的,因为已经缓存为TestContext(发生这种情况是因为和包含在同一个包中) 这意味着spring启动我的spring上下文三次!为什么?在日志中查看三次

  • 问题内容: 首先,我要指出的是我几乎没有python经验。 替代文字http://www.aquate.us/u/9986423875612301299.jpg 如您所知,只需在Windows PC上的“发送到”文件夹中放置一个快捷方式,就可以允许程序将文件作为参数。 我将如何编写一个以该文件为参数的python程序? 而且,如果有机会,这是一笔红利-我如何将它与urllib2集成以将文件发布到服

  • 通过 Context 可以获取到 *Request 和 ResopnseWriter 。同时还有一些方便的函数可以进行操作。 Req() 获取到*Request对象。 Forms() 可以获取表单提交内容,具体参见 Forms Cookies() 获取到Cookies对象并进行操作。 SecureCookies() 获取到安全Cookie对象并进行操作。 ServeFile() 将文件发送给浏览器

  • 问题内容: 从内部使用文件的最简单方法是什么? 具体来说,如何在不编写任何其他包装程序代码的情况下完成此功能? 与使用第三方库相比,本机功能是首选。 问题答案: 为了易于使用,ctypes是必经之路。 以下ctypes示例来自我编写的实际代码(在Python 2.5中)。到目前为止,这是我找到的最简单的方法来完成你的要求。 的ctypes东西具有:(所有的C型的数据类型int,char,short