SQL调用WebService接口
今天在做一个非常奇葩的东西。中间有个过程要在SQL触发器里面调用webservice接口。呵呵~
ALTER TRIGGER tgr_UpdateMemcached
ON dbo.[User]
AFTER UPDATE AS
--获得更新前的数据
--SELECT * FROM Deleted AS OldData --获得更新后的数据
--SELECT * FROM Inserted AS NewData --调用webService----------------
declare @ServiceUrl as nvarchar(1000)
DECLARE @UrlAddress nvarchar(500) --WebService地址:以http开头,结尾带斜杠。比如'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/'
set @UrlAddress = 'http://localhost/webService_UpdateCache/WebService1.asmx' DECLARE @FunName nvarchar(50)--WebService中调用的方法名:比如'getMobileCodeInfo'
SET @FunName = 'UpdateCache' --以下參数相应WebService中4个參数的[參数名]
declare @UserCode nvarchar(36),@UserName nvarchar(36),@UserAge nvarchar(36)
SET @UserCode='UserCode'
SET @UserName='UserName'
SET @UserAge='UserAge' --拼接參数名称
DECLARE @UserCode_Value nvarchar(50)='0000',@UserName_Value nvarchar(50)='0000',@UserAge_Value nvarchar(50)='0000' SELECT * FROM Inserted SELECT @UserCode_Value=LTrim(RTrim(UserCode)),@UserName_Value=LTrim(RTrim(UserName)),@UserAge_Value=LTrim(RTrim(UserAge)) FROM Inserted ;--从inserted表给參数赋值 --拼接地址
SET @ServiceUrl = @UrlAddress +'/'+ @FunName + '?' + @UserCode + '=' + [dbo].[UrlEncode](@UserCode_Value) +'&' + @UserName + '=' +[dbo].[UrlEncode](@UserName_Value) +'&' + @UserAge + '=' + [dbo].[UrlEncode](@UserAge_Value)
--SET @ServiceUrl = @UrlAddress +'/'+ @FunName + '?' + @UserCode + '=' + @UserCode_Value +'&' + @UserName + '=' +@UserName_Value +'&' + @UserAge + '=' + @UserAge_Value --SELECT @ServiceUrl --查看拼接地址,调试时打开 --訪问地址获取结果
Declare @Object as Int
Declare @ResponseText as nvarchar(4000) EXEC sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; --创建OLE组件对象
Exec sp_OAMethod @Object, 'open', NULL, 'post',@ServiceUrl,'false' --打开链接,注意是get还是post
EXEC sys.sp_OAMethod @object,'setRequestHeader',NULL,'Content-Type','application/x-www-form-urlencoded;charset=UTF-8'
Exec sp_OAMethod @Object, 'send'
EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT --输出參数
Select @ResponseText --输出结果
Exec sp_OADestroy @Object
GO
为了使SQL能够想代码里面对參数进行编码和解码,还须要增加以下自己定义函数:
USE [TestMemcached]
GO
/****** Object: UserDefinedFunction [dbo].[UrlEncode] Script Date: 2015/7/6 21:36:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO ALTER FUNCTION [dbo].[UrlEncode] ( @Param NVARCHAR(2000) ) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @HexStr VARCHAR(MAX) --Use system function to convert input string to hex string SET @HexStr = master.dbo.fn_varbintohexstr(CONVERT(VARBINARY(MAX), @Param)) --Remove the starting '0x' SET @HexStr = RIGHT(@HexStr, LEN(@HexStr)-2) --Declare required variables DECLARE @I INT, @Len INT DECLARE @Output VARCHAR(MAX), @S CHAR(4), @C CHAR(1) DECLARE @LoByte TINYINT, @HiByte TINYINT --Get length SET @Len=LEN(@HexStr)/4 --Start with first character SET @I=0 --Prepare the output string SET @Output='' WHILE @I<@Len BEGIN SET @S=SUBSTRING(@HexStr, @I*4 + 1, 4) IF RIGHT(@S, 2)='00' BEGIN --Try to convert 2 hex digits to char SET @LoByte = ASCII(SUBSTRING(@S, 2, 1)) - 48 IF @LoByte>10 SET @LoByte = @LoByte - 39 --0x61'a'-> 10 SET @HiByte = ASCII(SUBSTRING(@S, 1, 1)) - 48 IF @HiByte>10 SET @HiByte = @HiByte - 39 SET @C=CHAR(@LoByte + @HiByte * 16) --If it's a reserved character, don't encode IF @C LIKE '[A-Za-z0-9()''*-._! ]' SET @Output = @Output + @C ELSE SET @Output = @Output + '%' + LEFT(@S, 2) END ELSE SET @Output = @Output + '%u' + RIGHT(@S, 2) + LEFT(@S, 2) --Move to next hex SET @I = @I + 1 END RETURN @Output END
同一时候要注意webservice里面的方法哟:
[WebMethod]
public bool UpdateCache(string UserCode, string UserName, string UserAge)
{
// HttpContext.Current.Response.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
//string action = HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["UserName"]);
// string a = HttpContext.Current.Request.QueryString["UserName"]; UserCode = HttpUtility.UrlDecode(UserCode);
UserName = HttpUtility.UrlDecode(UserName);
UserAge = HttpUtility.UrlDecode(UserAge);
return MemCache.GetInstance().Replace<ClassLib.User>(UserCode, new ClassLib.User() { UserCode = UserCode, UserName = UserName, UserAge = UserAge }); }
SQL调用WebService接口的更多相关文章
- Java调用webservice接口方法
java调用webservice接口 webservice的 发布一般都是使用WSDL(web service descriptive langu ...
- php中创建和调用webservice接口示例
php中创建和调用webservice接口示例 这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...
- 使用soapui调用webservice接口
soapui是专门模拟调用webservice接口的工具,下面介绍下怎么使用: 1.下载soapui并安装: 2.以免费天气获取接口为例:http://www.webservicex.net/glob ...
- 使用JS调用WebService接口
<script> $(document).ready(function () { var username = "admin"; var password = &quo ...
- java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport
网上说wsimport是jdk1.6后自带的客户端生成调用webservice接口的工具,其实我挺喜欢原生的东西,毕竟自家的东西用着应该最顺手啊,但往往让人惊艳的是那些集成工具. 本机jdk1.8.1 ...
- js调用Webservice接口案例
第一步:新建Webservice接口 主文件方法 using System;using System.Collections.Generic;using System.Web;using System ...
- 动态调用WebService接口的几种方式
一.什么是WebService? 这里就不再赘述了,想要了解的====>传送门 二.为什么要动态调用WebService接口? 一般在C#开发中调用webService服务中的接口都是通过引用过 ...
- ThinkPHP使用soapclient调用webservice接口
1,开启 php.ini 这2个服务 12 extension=php_openssl.dllextension=php_soap.dll 以公共天气预报webservice为例,采用thinkPHP ...
- 调用webservice接口,报错:(十六进制值0x01)是无效的字符
#事故现场 调用webservice接口,报错:(十六进制值0x01)是无效的字符. 如图: 意思是webservice返回的信息中包含无效的字符,无法解析成xml: #分析 使用postman向we ...
随机推荐
- LoadRunner常用知识点-----LoadRunner日志输出
在Windows环境下,日志文件output.txt保存在脚本目录中:在UNIX环境下,保存在标准输出中. [Vuser]——[Run Time Settings]——[General]——[Log] ...
- Django第一步
对于一个web框架,掌握了三部分的内容,就可以说是迈出了第一步. 1. 准备开发环境 2. 创建一个工程,并运行 3. 开发hello world应用 1. 准备环境 首先应该是安装python和dj ...
- 集群运维ansible
ssh免密登录 集群运维 生成秘钥,一路enter cd ~/.ssh/ ssh-keygen -t rsa 讲id_rsa.pub文件追加到授权的key文件中 cat ~/.ssh/id_rsa.p ...
- Java 初相识
Java是如何出现的呢?这就要回到1991年,那时候随着单片机的发展,出现了很多微型的系统,Sun公司在这个时候就成立的一个项目组,成员就有我们熟知的“Java之父” 詹姆斯·高斯林,起初的目标是为了 ...
- CentOS的利手:“Screen”一个可以在多个进程之间多路复用一个物理终端的窗口管理器
你是不是经常需要远程登录到Linux服务器?你是不是经常为一些长时间运行的任务头疼?还在用 nohup 吗?那 么来看看 screen 吧,它会给你一个惊喜! 你是不是经常需要 SSH 或者 tele ...
- flex sqlite 操作blog 二进制数据
1, 通常的操作方式: 首先我们建立表:CREATE TABLE "pages" ("id" varchar, "data& ...
- 处理 CALayer 变形后的抗锯齿问题
处理锯齿当然要用抗锯齿,iOS 可以通过修改 Plist 实现全局抗锯齿,但是这样容易出现性能问题. 所以就要使用对单个 Layer 开启抗锯齿的方法 layer.allowsEdgeAntialia ...
- JS字符串相关操作
01.插入 参数说明:str表示原字符串变量,flg表示要插入的字符串,sn表示要插入的位置 function insert_flg(str,flg,sn){ var newstr="&qu ...
- js文件命名冲突理解
在一个index.html文件里先后导入a.js和b.js文件a.js文件里写上var s = 2;console.log(s);b.js文件里写上var s = 5;这时a.js和b.js用了相同的 ...
- SpringBoot无法启动,Process finished with exit code 0
1.排查yml和properties文件是否配置错误 2.排查POM引入的包