MSSQL预存程序内调用Web Service

来源:邁向程式殿堂  发布日期:2013-05-10 20:14:35

因系统架构关系,希望相同逻辑及运作都是透过同一平台进行,因此,今日有一个需求是在SQL Server中必须去呼叫

此平台的Web Service,以达到逻辑跟功能的一致性。所以,就必须让MS SQL去呼叫Service,为什么不用SSIS呼叫

呢?因为这需求是要产生的资料内容是Real Time且触发时间也是Real Time。换句话说就是随时都必须要用到,且可

能需要给其他预存程序使用。所以,便写一个预存程序方法,这样比较容易达到延展性在做这步骤时候,需先参考我前

一篇的启用SQL Server中的OLE Automation功能,才有办法使用。主要原因是在呼叫Web Service需要用到

OLE物件。

1.首先我们先设定Web Service的URL及要传入的参数,将其bind成一个URL

SET @url='http://XX/XX/send.asmx/Send_07?A='+ @A + '&B=' + @B+ '&V=' + @V + '&C=' + @C + '&D=' + @D + ''2.透过 Sp_oacreate 预存程序取得 MSXML2.ServerXMLHttp 物件的Token

EXEC Sp_oacreate
  'MSXML2.ServerXMLHttp',
  @result outSp_oacreate MSDN Address : http://msdn.microsoft.com/zh-tw/library/ms189763.aspx

3.透过 Sp_oamethod 预存程序去呼叫OLE物件,这边需要取用上面程式回传的Token值进行动作,使用OLE物件

去开启要使用的Web Service URL,同时Web Service的URL也带入要传入的参数

EXEC Sp_oamethod
  @result,
  'open',
  NULL,
  'get',
  @url,
  falsesp_OAMethod MSDN Address : http://msdn.microsoft.com/zh-tw/library/ms174984.aspx

4.最后再使用 Sp_oamethod 去送出命令

EXEC Sp_oamethod
  @result,
  'send'

使用 Sp_oagetproperty 取得执行后的OLE回传值,若是Web Service有回传资料需要读取,也可以透过这方式

取得XML字串,这时候在自行处理其中内容放入DB中。

Sp_oamethod MSDN Address : http://msdn.microsoft.com/zh-tw/library/ms175079.aspx

完整程式码

DECLARE @result INT
DECLARE @url VARCHAR(max)
DECLARE @service_response VARCHAR(500)

SET @url='http://XX/XX/send.asmx/Send_07?A='+ @A + '&B=' + @B+ '&V=' + @V + '&C=' + @C + '&D=' + @D + ''

EXEC Sp_oacreate
  'MSXML2.ServerXMLHttp',
  @result out

EXEC Sp_oamethod
  @result,
  'open',
  NULL,
  'get',
  @url,
  false

EXEC Sp_oamethod
  @result,
  'send'

EXEC Sp_oagetproperty
  @result,
  'responsetext',
  @service_response out其中的Send_07是Web Service其中一个Method name。且此外要达成这功能,Web service之Web config也要加入下面设定

<webServices>
   <protocols>
       <add name="HttpGet"/>        
   </protocols>
</webServices>


Tag标签: MSSQL   Web   Service  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规