gpt4 book ai didi

sql-server - 从 SQL 存储过程调用 SOAP Web 服务

转载 作者:行者123 更新时间:2023-12-02 15:21:59 26 4
gpt4 key购买 nike

我正在尝试在 TSQL 中构建一个存储过程来调用 Web 服务。我以前在Oracle中做过这个,但在MSSQL中似乎没那么容易。当然,有很多理由不在存储过程中执行此操作,但由于此过程仅在每日批处理中使用,因此性能并不是太大的问题。我想做的事情如下:将全名发送到Web服务,Web服务将返回一个分为名字、前缀、姓氏等的名称。返回的值需要写入表中。

我在 http://www.vishalseth.com/post/2009/12/22/Call-a-webservice-from-TSQL-(Stored-Procedure)-using-MSXML.aspx 发现了一个有趣的过程这似乎完全符合我的要求,但是一旦您将主体添加到调用中,我就会遇到诸如“参数不正确”之类的错误。文章中也指出了这一点,显然没有简单的解决方案。我确实需要发送请求正文。

我还阅读了很多有关使用 CLI 或“Web 服务任务编辑器”或“SSIS”解决该问题的文章,但我找不到任何关于从哪里开始的教程。现在我只有 Microsoft SQL Server Management Studio。

顺便说一句,我使用的是 SQL Server 2012。

关于我应该朝哪个方向发展有什么想法吗?

我已经找到了这个描述,看起来很干净:http://www.databasejournal.com/features/mssql/article.php/3821271/Calling-a-Web-Service-from-within-SQL-Server.htm但是,在安装 Visual Studio 2012 并创建“SQL Server 数据库项目”后,我无法在解决方案上下文菜单中选择“添加 Web 引用”,菜单中只有这样的选项。

最佳答案

过去我使用过以下方法,它可能不是现在最好的方法,但它对我来说很成功:

DECLARE @obj int,
@url VarChar(MAX),
@response VarChar(MAX),
@requestHeader VarChar(MAX),
@requestBody VarChar(MAX)

SET @url = 'http://....'

SET @requestBody = '<soapenv:Envelope>
<soapenv:Header/>
<soapenv:Body>
...
</soapenv:Body>
</soapenv:Envelope>'

EXEC sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
EXEC sp_OAMethod @obj, 'Open', NULL, 'GET', @url, false
EXEC sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Type', 'text/xml;charset=UTF-8'
EXEC sp_OAMethod @obj, 'setRequestHeader', NULL, 'SOAPAction', 'POST'
EXEC sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Length', LEN(@requestBody)
EXEC sp_OAMethod @obj, 'send', NULL, @requestBody
EXEC sp_OAGetProperty @obj, 'responseText', @response OUT


SELECT @response [RESPONSE]

EXEC sp_OADestroy @obj

我用它来调用一个网络服务,该服务生成一个报告并在该方法中通过电子邮件发送它。

关于sql-server - 从 SQL 存储过程调用 SOAP Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26213278/

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