SQL存储过程来调用webservice
如果用存储过程来调用webservice
那存储过程的功能感觉能做好多事情了?
别自欺欺人了、那些功能还是webservice来实现的...
完整的webservice代码:(也是默认的,新建.asmx文件的时候就有的:)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; namespace webservice { /// <summary> /// service 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 //[System.Web.Script.Services.ScriptService] public class service : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } } }
http://localhost:44786/service.asmx
具体的页面(路径:http://localhost:44786/service.asmx/HelloWorld)
好吧·默认的一个服务就是的...下面开始讲下重点...如果用存储过程来调用这个服务...
1 USE [master] 2 GO 3 /****** Object: StoredProcedure [dbo].[U_CallWebService] Script Date: 11/04/2016 09:57:35 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 Create PROCEDURE [dbo].[U_CallWebService] 9 @parameter varchar(200)--这个现在用不到,以后如果需要参数的话需要的.... 10 AS 11 BEGIN 12 DECLARE @OBJ INT 13 DECLARE @URL VARCHAR(500) 14 DECLARE @RESPONSE VARCHAR(3000) 15 DECLARE @RET VARCHAR(1000) 16 17 SET @URL ='http://localhost:44786/service.asmx/HelloWorld' 18 EXEC SP_OACREATE 'MSXML2.ServerXMLHttp',@OBJ OUT 19 EXEC SP_OAMETHOD @OBJ,'Open',NULL,'post',@URL,FALSE 20 EXEC SP_OAMETHOD @OBJ,'send' 21 --@RET : 0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 整数值。 22 EXEC @RET = SP_OAGETPROPERTY @OBJ,'responseText',@RESPONSE OUT 23 IF @RET <> 0 24 BEGIN 25 EXEC sp_OAGetErrorInfo @OBJ 26 END 27 select @RET AS 'ret(0即成功)' 28 --原本以为这个[d]是返回数据中的一个值(例如这样{"d":"Hello World"}),是必须写[d]的 29 --正确的解释是:这个[d]是SELECT 的一个列名,和SELECT GETDATE() AS TIME 中的TIME是一样性质的.指定列名; 30 SELECT @RESPONSE--这个是(无列名) 31 SELECT @RESPONSE[d] 32 SELECT @RESPONSE AS 'd'--SELECT @RESPONSE[d] 等于SELECT @RESPONSE AS 'd' 33 --释放、销毁 34 EXEC SP_OADESTROY @OBJ 35 36 END
在运行下就可以看到效果了...
不足之处:
0001.<code>EXEC @RET = SP_OAGETPROPERTY @OBJ,'responseText',@RESPONSE OUT</code>
'responseText'即属性值,如果不知道会报错:
Error Source Description HelpFile HelpID
0x80020006 ODSOLE Extended Procedure 未知名称。 NULL 0
<我调用WCF的时候,调试都可以看到确实运行我的本地WCF的一个服务了,但是这个返回值因为不知道属性名获取不到!>
0010.貌似字符超过8000就会报错...还是4000?总之不能太长...
扩展:
至今还不知道调用WCF的那个属性值是什么!!!
望有搞过这块的不吝(Lin)赐教...
附:
微软关于错误的解决办法(都是English):https://support.microsoft.com/en-us/kb/325492