李超燕 周建良
摘 要: Web服务是在网上发布的一种服务。在进行应用程序开发时,可以直接来调用该服务,而简化开发流程。本文对Web服务所采用的主要技术进行了阐述,并且通过一个软件开发中的实际应用让大家来掌握如何对网上存在的Web服务进行调用和调试。
关键词: Web服务; Web引用; 第三方Web服务
中图分类号: TP 319 文献标志码: A 文章编号: 1671-2153(2015)04-0072-03
0 引 言
Web 服务是通过Web 进行发布、定位和调用的松散耦合组件。由于Web 服务具有完好的封装性、松散耦合、高度集成能力等特点,Web 服务成为越来越多企业实现大规模软件开发和服务共享的解决方案[1]。在各大网站中经常可以看到查询天气预报、查询火车班次、查询IP地址所在地、查询手机号码归属地等功能。这里的部分功能可以自己编写代码来实现,而有一些是需要相关部门来提供接口,如天气预报。其实,在网上已经提供了实现这些功能模块的Web服务,我们只需直接调用这些Web服务的接口就可以了。本文将通过一个实例来介绍如何调用这些Web服务。
1 软件结构设计
这里利用asp.net开发完成了一个电子商务的购物网站,在该网站中有用户登录购物的这样一个模块,如图1所示。
如果用户直接输入用户名和密码进行登录,那么这样的登录模块非常容易被黑客攻击。为了防止用户利用软件进行恶意登录,可以提供让用户输入验证码。验证码可以自己编写,不过自己编写代码来实现验证码的功能不是那么容易的,其实可以在网上找到第三方提供的验证码Web服务。本文介绍了如何使用第三方提供的Web服务来实现登录模块中的验证码功能。在本项目中要调用第三方的Web服务来实现验证码功能的软件执行过程如图2所示。
2 软件功能实现
(1) 为项目添加Web引用
在asp.net开发的电子商务网站开发项目中添加Web引用,可以寻找一个第三方的Web服务,在此使用http://webservice.webxml.com.cn/WebServ
ices/ValidateCodeWeb Service.asmx,修改Web的引用名为IdentifyCodeWS,添加成功后的Web引用文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> referenceType="System.Web.Services.Discovery.DiscoveryDocumentReference" url="http://webservice.webxml.com.cn/webservices/validatecodewebservice.asmx?disco" filename="validatecodewebservice.disco" /> filename="validatecodewebservice.wsdl" />
在以上代码中可以看出Web引用文件采用的是XML格式的文件,XML渗透到了Web服务的各个层次。也就是说如果没有XML就没有Web服务。在引用文件内容中包含了WSDL文件,该文件是用来对Web服务的位置、接口和协议做详细说明的文档。WSDL是一种XML应用,它将Web 服务描述定义为一组服务访问点,请求者可以通过这些服务访问点对服务进行访问[3]。这里所引用的Web服务的地址,最后是以.asmx结尾的。在浏览器中输入http://webservice.webxml.com.cn/webservic
es/validatecode webservice.asmx可以发现在该页中提供了6种验证码服务。在访问Web服务时采用的协议是SOAP协议,该协议是是以XML为基础的消息传输协议,可以采用XML安全协议来保证Web 服务的安全性[2]。
(2) 在项目中添加IdentifyCode.aspx页面用于生成验证码,在所对应的.cs页面中添加如下的代码
IdentifyCodeWS.ValidateCodeWebService vcws = new IdentifyCodeWS.ValidateCodeWebService();
protected void Page_Load(object sender, EventArgs e)
{
if(Request.Params["validateDate"]!=null)
{ int i=Int32.Parse(Request.Params["validateDate"].ToString());
Response.ContentType="image/png";
byte[] b=vcws.enValidateByte(i.ToString());
Response.BinaryWrite(b);
}
}
在IdentifyCode.aspx页面中实例化Web服务对象,在此处的Request.Params["validateDate"]代表在登录页面login.aspx中随机生成的对象作为参数传递给IdentifyCode.aspx页面,并且在该页面中返回一个二进制字符串,将它写入HTTP输出流。
(3) 在登录页面中,添加如下的代码,实现登录功能和验证码的生成
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Random rd = new Random();
string str = rd.Next(1000,9999).ToString();
Image1.ImageUrl = "IdentifyCode.aspx?validateDate=" + str;
Session["validateDate"] = str;
}
}
在登录页面中,实例化随机对象,并且生成一个1000-9999之间的随机数,将随机数传递给IdentifyCode.aspx页面, 将Web服务中返回的随机图片验证码显示在登录页面的图片中。
(4) 验证码的测试和运行
运行登录页面,在流览器中打开该页面,可以看到有验证码的登录页面,如图3所示,该验证码的实现就是调用了网上所存在的Web服务,这样可以大大简化我们的开发工作。利用这种调用方式可以非常方便的来实现复杂的功能模块,而不需要知道该功能具体是如何用代码编写的,只要知道Web服务所提供的接口就可以了。
3 结束语
本文介绍了Web服务的架构,并且通过登录时验证码的实现介绍了如何调用Internet上发布的Web服务,在Internet上发布了各种功能的Web服务,在进行软件开发时,可以调用这些Web服务来简化软件的开发过程。
参考文献:
[1] 佘青. 一种语义Web服务描述语言WSDL-S[J]. 网络安全技术与应用,2009(4):85-86.
[2] 刘振鹏,周冬冬. 一个基于SOAP消息的Web服务综合安全模型[J]. 武汉大学学报,2006,52(5):570-573.
[3] 林川. 基于UDDI和WSDL的Web 服务发布方案[J].计算机工程与设计,2005(4):993-995.
(责任编辑:徐兴华)