zoukankan      html  css  js  c++  java
  • SQLServer调WebService & 错误解决:请求格式无法识别

    (sqlServer 2008 + VS2010)

    首先,对服务器进行配置。

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ole Automation Procedures', 1;
    GO
    RECONFIGURE;
    GO

    然后实现SQL调用WebService接口,代码如下:

    DECLARE @ServiceUrl AS NVARCHAR(1000)
    DECLARE @UrlAddress VARCHAR(500)
    --------WebService地址:以http开头,结尾带斜杠,
    --例如'http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/' 
    SET @UrlAddress ='--地址--'
    
    DECLARE @FunName VARCHAR(50)
    --- WebService中调用的方法名:例如‘HelloWorld’
    SET @FunName='Add'
    
    --- 以下参数对应WebService中参数的[参数名]
    DECLARE @p1 VARCHAR(800),@p2 VARCHAR(100),@p3 VARCHAR(100)
    SET @p1='a'
    SET @p2='b'
    SET @p3='c'
    --- 以下参数对应WebService中参数的[参数值]
    DECLARE @p1_Value VARCHAR(100),@p2_Value VARCHAR(100),@p3_Value VARCHAR(100)
    SET @p1_Value = '1'
    SET @p2_Value = '2'
    SET @p3_Value = '3'
    
    SET @ServiceUrl=@UrlAddress+@FunName+'?'
    +@p1+'='+@p1_Value+'&'+@p2+'='+@p2_Value+'&'+@p3+'='+@p3_Value
    
    --- 创建 OLE 对象的实例。
    --- 返回的对象令牌必须是数据类型为 int 的局部变量。 该对象令牌用于标识所创建的 OLE 对象,并用于调用其他 OLE 自动化存储过程。
    DECLARE @Object AS INT
    DECLARE @ResponseText AS VARCHAR(8000)
    
    EXEC sys.sp_OACreate 'MSXML2.XMLHTTP',@Object OUT;
    EXEC sys.sp_OAMethod @Object,'open',NULL,'get',@ServiceUrl,'false'
    EXEC sys.sp_OAMethod @Object,'send'
    EXEC sys.sp_OAMethod @Object,'responseText',@ResponseText OUTPUT
    
    SELECT @ResponseText
    
    --- 当不再需要该对象时,调用 sp_OADestroy 释放使用 sp_OACreate 创建的对象实例。
    EXEC sys.sp_OADestroy @Object
    
    GO
    View Code

    此上可参见:https://www.cnblogs.com/davidhou/p/5868136.html

    本例中使用的WebService方法 Add:

    [WebMethod(Description = "Add —— 测试方法")]
    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }

    调用时遇到的问题:在SQL中报错:请求格式无法识别。

    解决方法:在Web.config System.Web节点下添加如下内容

    <webServices>
        <protocols>
            <add name="HttpPost"/>
            <add name="HttpGet"/>
        </protocols>
    </webServices>
  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/catherinehu/p/8443751.html
Copyright © 2011-2022 走看看