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";
        }
    }
}
View Code

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
存储过程调用webservice

在运行下就可以看到效果了...

 

不足之处:

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

 

posted @ 2016-11-04 10:56  zh89233  阅读(4165)  评论(0编辑  收藏  举报