如果用存储过程来调用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)

好吧·默认的一个服务就是的...下面开始讲下重点...如果用存储过程来调用这个服务...

 USE [master]
GO
/****** Object: StoredProcedure [dbo].[U_CallWebService] Script Date: 11/04/2016 09:57:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create PROCEDURE [dbo].[U_CallWebService]
@parameter varchar(200)--这个现在用不到,以后如果需要参数的话需要的....
AS
BEGIN
DECLARE @OBJ INT
DECLARE @URL VARCHAR(500)
DECLARE @RESPONSE VARCHAR(3000)
DECLARE @RET VARCHAR(1000) SET @URL ='http://localhost:44786/service.asmx/HelloWorld'
EXEC SP_OACREATE 'MSXML2.ServerXMLHttp',@OBJ OUT
EXEC SP_OAMETHOD @OBJ,'Open',NULL,'post',@URL,FALSE
EXEC SP_OAMETHOD @OBJ,'send'
--@RET : 0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 整数值。
EXEC @RET = SP_OAGETPROPERTY @OBJ,'responseText',@RESPONSE OUT
IF @RET <> 0
BEGIN
EXEC sp_OAGetErrorInfo @OBJ
END
select @RET AS 'ret(0即成功)'
--原本以为这个[d]是返回数据中的一个值(例如这样{"d":"Hello World"}),是必须写[d]的
--正确的解释是:这个[d]是SELECT 的一个列名,和SELECT GETDATE() AS TIME 中的TIME是一样性质的.指定列名;
SELECT @RESPONSE--这个是(无列名)
SELECT @RESPONSE[d]
SELECT @RESPONSE AS 'd'--SELECT @RESPONSE[d] 等于SELECT @RESPONSE AS 'd'
--释放、销毁
EXEC SP_OADESTROY @OBJ 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

SQL存储过程来调用webservice的更多相关文章

  1. 存储过程中调用webservice

    存储过程中调用webservice其实是在数据库中利用系统函数调用OLE. 1.查找webservice api 可得到MSSOAP.SoapClient. 2.查找API 接口可得到mssoapin ...

  2. SQL存储过程的调用及写法

    调用函数: public class SqlProcess { ; public DataSet ReturnSet = null; public SqlDataAdapter adapter = n ...

  3. SQL 存储过程里调用另一个存储过程

    由于创建了一个存储过程,并且要在另一个存储过程里调用这个存储过程所以在网上找了一下相关的代码,现在总结一下,防止以后还会用到 由于这次我写的存储过程只需要返回一个求和的结果,所以我使用了output ...

  4. SQL Server中调用WebService的实例

    尊重原著作:本文转载自http://www.cnblogs.com/icycore/p/3532197.html 1.Ole Automation Procedures 服务器配置选项 当启用 OLE ...

  5. SQL——存储过程实例 调用带参数的过程(成绩输出)

    create or replace procedure test_score(input in number,output out char) is begin then begin output : ...

  6. 在存储过程中调用WebService

    1 create procedure usp_CallWebServices 2 ( 3 @parameter nvarchar(500)=null 4 ) 5 as 6 Declare @obj i ...

  7. SQL Server中调用WebService

    首先要启用Ole Automation Procedures,使用sp_configure 配置时如果报错"不支持对系统目录进行即席更新",可以加上WITH OVERRIDE选项. ...

  8. SQL调用WebService接口

    今天在做一个非常奇葩的东西.中间有个过程要在SQL触发器里面调用webservice接口.呵呵~ ALTER TRIGGER tgr_UpdateMemcached ON dbo.[User] AFT ...

  9. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

随机推荐

  1. Win10中解决SYSTEM权限获取,删Windows old

    一.[Windows.old]文件夹[右键]->[属性] 二.[安全]->[高级] 三.[更改] 四.添加[Everyone],点击[确定] 五.如下图,勾选两个选项,再[确定] 六.一路 ...

  2. MAC上快速调出终端的设置(保持和Windows的操作一致)

    在Windows上可以这样操作[Win+R]键->输入[cmd/cmder]打开终端. 在MAC下需要做些设置:打开[系统偏好设置]->打开[键盘]->打开[快捷键]->找到[ ...

  3. dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 . dedecms原生提供一个"本地变量注册"的模拟 ...

  4. Android四大组件

    Activity 概念 活动是一种可以包含用户界面的组件,主要用于和用户交互.一个应用程序可以包含零个或多个活动. 基本用法 手动创建活动 1. 创建或加载布局 2. 在AndroidManifest ...

  5. JAva使用DOM读取XML数据(解析)

    原来一切都是有套路的 使用DOM解析XML文档步骤 1.创建解析器工厂对象 DocumentBuildFactory对象 2.由解析器工厂对象创建解析器对象,即DocumentBuilder对象 3. ...

  6. 一起买beta版模块单元测试

    一起买beta版模块接口单元测试 测试目的 保证代码质量,对各个模块进行单元测试,不仅可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误. 而且不用每次启动程序而等待浪费时间. 单元描 ...

  7. iOS - CAEmitterLayer 学习笔记一

    其他参考博客: http://my.oschina.net/u/2340880/blog/485095 http://www.cnblogs.com/YouXianMing/p/3785876.htm ...

  8. Python 数据处理----对定长数据的处理

    场景: 有时候我们对大量数据进行处理,对性能要求很高,而且数据都是定长的,比如对移动信息登记表进行处理:名字 身份证信息 手机号码 这些都是定长的,今天小花来教大家如何对此类数据进行处理. 步骤一: ...

  9. java编程思想-java注解

    注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据. 一.定义注解 注解的定义看起来很像接口的定义.事实上,与其他任何Java接口一样, ...

  10. firefox怎么修改tls协议号

    如果目前正在运行火狐26,你可能已经注意到,浏览器仅支持SSL 3.0和TLS 1.0,默认不开启TLS 1.1或TLS 1.2.另外我们知道Firefox 27 已经实现了对TLS 1.2的支持.  ...