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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了