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>