SQL Server存储过程调用WebService

一、发布WebService,服务的内容是通过手机号码查询用户姓名

二、编写存储过程

复制代码
create procedure [dbo].[proc_CallWebService]
@parameter varchar(20)
as
begin
    declare @obj int
    declare @url varchar(200)
    declare @response varchar(5000)
    set  @url='http://localhost/zyr/WebServiceDemo.asmx/GetUserNameByMobile?mobile='+@parameter+''
    exec sp_OACreate 'MSXML2.ServerXMLHttp',@obj out
    exec sp_OAMethod @obj,'Open',null,'GET',@url,false
    exec sp_OAMethod @obj,'send'
    exec sp_OAGetProperty @obj,'responseText',@response out
    
    select @response [response]
    exec sp_OADestroy @obj
end
复制代码

说明:

sp_OACreate 创建 OLE 对象实例。

  • 第一个参数为 OLE 对象的程序标识符(ProgID)或类标识符(CLSID)。
  • 第二个参数为返回的对象令牌,必须是数据类型为 int 的局部变量,在后面的方法中都要用到对象令牌。输出参数,必须加 OUT 或 OUTPUT。

sp_OAMethod 调用 OLE 对象的方法。

  • 第一个参数为对象令牌。
  • 第二个参数为方法名称。
  • 第三个参数为方法的返回值,如果方法返回的是对象,则该参数类型为 int。输出参数,必须加 OUT 或 OUTPUT。
  • 第四个及以后的参数为方法的参数值,如果方法的参数是输出参数,则要加上 OUT 或 OUTPUT。
  • sp_OAMethod 也可用来获取属性值。

sp_OAGetErrorInfo 获取 OLE 自动化错误信息。

  • 第一个参数为对象令牌。
  • 第二个参数为错误信息的来源。输出参数,必须加 OUT 或 OUTPUT。
  • 第三个参数为错误的描述。输出参数,必须加 OUT 或 OUTPUT。

sp_OADestroy 释放已创建的 OLE 对象。

  • 第一个参数为对象令牌。

另外,sp_OAGetProperty 获取 OLE 对象的属性值,sp_OASetProperty 将 OLE 对象的属性设置为新值,sp_OAStop 停止服务器范围内的 OLE 自动化存储过程执行环境。这些都比较简单。

三、执行存储过程

exec [dbo].[proc_CallWebService] '1526022****'

结果如下:

<?xml version="1.0" encoding="utf-8"?>  <string xmlns="http://app.cloud-erp.cn/">巫燕华</string>

四、可能出现的错误

1、问题一

解决方法:

可以使用 sp_configure 系统存储过程来查看和更改 Ole Automation Procedures 选项的当前值。

查看 OLE Automation Procedures 的当前设置。

EXEC sp_configure 'Ole Automation Procedures';
GO

启用 OLE Automation Procedures。

复制代码
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
复制代码

2、问题二

 解决方法:

在webservice的 <system.web> 节点下加入 

复制代码
<webServices>
    <protocols>
        <add name= "HttpPost" />
        <add name= "HttpGet" />
    </protocols>
</webServices>
复制代码

 

posted @ 2013-07-09 11:18  阳光小屋  阅读(696)  评论(0编辑  收藏  举报