• 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

  • 相关阅读:
    Access Token 机制详解
    Authorization Code 授权原理和实现方法
    Access Token 与 Refresh Token
    简单介绍 Oauth2.0 原理
    进行web开发时应该考虑的架构性因素
    查看linux服务器CPU数量
    Centos7 修改主机名
    Centos6 编译安装Python3.6
    Linux编译安装软件常见问题及排查
    问题列表
  • 原文地址:https://www.cnblogs.com/love-zf/p/6029437.html
Copyright © 2020-2023  润新知