【问题标题】:Webservice From SQL来自 SQL 的 Web 服务
【发布时间】:2008-12-30 13:26:28
【问题描述】:

我可以从存储过程调用远程 Web 服务并使用重新调整的值吗?

【问题讨论】:

    标签: sql web-services tsql


    【解决方案1】:

    如果您使用的是 SQL 2005/2008,如果您能够安装和运行这些存储过程,则可以通过 CLR 存储过程执行此操作。欲了解更多信息:

    http://msdn.microsoft.com/en-us/library/ms190790.aspx

    【讨论】:

      【解决方案2】:

      Service Broker 可能会提供您在此处寻找的那种功能。

      【讨论】:

        【解决方案3】:

        正如 The AntiSanta 所说,使用 CLR 存储过程是可能的。真正的问题是你是否可以完全避免它。从存储过程调用 Web 服务感觉是颠倒的。理想情况下,您应该有一些其他服务/应用程序/层同时调用存储过程和 Web 服务。可能存储的过程会返回 Web 服务的参数值,并且您在 WS 调用完成后提交本地事务。

        从长远来看,这将使调试、部署和支持更加简单,并解耦存储过程和 Web 服务之间的直接引用。

        【讨论】:

        • 您还有其他建议吗?我有一个带有 sql 后端的 Access 前端(用 VBA 编写的 adp)程序。我想从访问中调用 Web 服务,但不想使用 com 插件。我正在调用远程服务器(总部)上的网络服务,它给了我一个采购订单号。
        【解决方案4】:

        在 SQL Server 2000 及更高版本(如果未启用 CLR)上,如果您的 Web 服务已有 COM 包装器,则可以通过存储过程(sp_OACreatesp_OAMethod 等)使用 COM。

        【讨论】:

          【解决方案5】:

          这是我的有效代码。

          exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT  
          if @hr < 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp failed',16,1) 
          return end  
          exec @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @UrlString, false  
          if @hr <0 begin set @msg = 'sp_OAMethod Open failed' goto eh end  
          exec @hr = sp_OAMethod @obj, 'send'  
          if @hr <0 begin set @msg = 'sp_OAMethod Send failed' goto eh end  
          exec @hr = sp_OAGetProperty @obj, 'status', @status OUT  
          if @hr <0 begin set @msg = 'sp_OAMethod read status failed' goto eh end  
          if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +str(@status) goto eh end  
          exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT  
          if @hr <0 begin set @msg = 'sp_OAMethod read response failed' goto eh end  
          exec @hr = sp_OADestroy @obj  
          select @response  
          

          ......

          嗯:

          exec @hr = sp_OADestroy @obj  
          Raiserror(@msg, 16, 1)  
          Return  
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-19
            • 2012-07-04
            • 2012-06-14
            • 1970-01-01
            • 2014-06-24
            • 1970-01-01
            相关资源
            最近更新 更多