首页 > 范文大全 > 正文

基于Ajax的Web Service架构

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Ajax的Web Service架构范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:Web Service是一种基于标准的应用集成方式,允许不同的客户端使用它提供的服务。本文介绍通过ajax使用异步消息传递,SOAP协议作为web服务通信协议的基础,实现Web Servcie架构的应用程序的开发。

关键词:Web service;Ajax;SOAP协议

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)11-20341-02

1 前言

Web Service主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows、Linux)中使用。Web Service技术的不断成熟,使得面向服务的架构(SOA)思想得到了很好的应用。

Ajax引擎实现无需页面无刷新等待的情况下,进行与服务器之间的数据通信,使用它可以构建更为动态和响应更灵敏的Web应用程序。基于SOAP协议,通过Ajax调用Web服务,实现异构程序和平台无关的数据通信。

2 关键技术

2.1 Ajax

在Ajax之前,WEB站点强制用户进行提交、等待、重新加载的模式,用户的动作和服务器的反应同步,Ajax提供与服务器异步通信的能力。通过Ajax用户通过JavaScript和DHTML向服务器发出异步请求,执行更新或查询数据,当请求返回时来更新UI,而不是刷新整个页面,降低了与服务器之间通信的数据量,加快了用户请求的反应时间。

在WEB浏览器使用SOAP服务比较困难,大多数流行的WEB浏览器在生成和处理XML方面会有不同,支持XML处理的API比较少。比较常见的方法是通过XMLHttpRequest API,XMLHttpRequest是一个用于执行异步HTTP请求的JavaScript对象。AJAX框架的关键是名为XMLHttpRequest的JavaScript对象,通过它客户端开发人员可以在不打断用户操作或者在充分使用隐藏表单的情况下通过HTTP直接发送和接收XML文档。现在常用的浏览器(IE, Mozilla, Safari, Opera)都特别提供了对XMLHttpRequest对象的支持,同时也广泛支持XML DOM。

2.2 SOAP

目前有很多应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是,RPC会产生兼容性以及安全问题;防火墙和服务器通常会阻止此类流量。通过HTTP在应用程序间通信的就是更好的方法,因为HTTP被所有的因特网浏览器及服务器支持。SOAP(Simple Object Access Protocal,简单对象访问协议)可以完成这个任务的。SOAP提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。SOAP技术用于实现异构程序和平台间的数据交换,从而能够使应用能被广泛地访问。SOAP是将基于HTTP的WEB技术与XML的灵活性和可扩展性组合在一起。

SOAP消息处理框架定义了一套XML元素,封装XML消息以便在系统中间进行传输。该框架包含的核心XML元素有Envelope,Header,Body和Fault,目前常见SOAP消息有1.1和1.2两个版本。Envelope是SOAP消息的根元素。Envelope元素包含一个可选的Header元素,一个必须的Body元素,Body元素包含所以的调用和响应信息。Fault元素提供处理此消息发生的错误。HTTP协议绑定定义了在HTTP上使用SOAP的规则。SOAP请求、响应映射到HTTP协议请求、响应模型。对于SOAP消息使用POST方式进行请求,SOAPAction表示该消息的意图。

3 WEB Service架构

实现通过页面异步调用目标服务器的一个Web服务,所用开发环境是Visual studio2005。首先创建 Web服务,提供实现两个整数相加的服务。继承WebService实现MyService类,在WebService继承类中可以提供Web方法和非Web方法,在方法前标注[WebMethod],表示该方法是一个Web方法,Add方法就是一个Web方法。示例代码:

[WebService(Namespace = "/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class MyService : System.Web.Services.WebService{

[WebMethod]

public int Add(int i ,int j) {

return i + j;

}

}

然后在Web页面中添加SOAP消息的请求,这里通过Ajax进行发送请求SOAP消息,由于XMLHttpRequest不是一个W3C标准,所以可以采用多种方法使用JavaScript来创建XMLHttpRequest的实例。Internet Explorer把XMLHttpRequest实现为一个ActiveX对象,其他浏览器(如Firefox、Safari和Opera)把它实现为一个本地JavaScript对象。示例代码:

function getXmlHttpRequestObject() {

if (window.XMLHttpRequest) {

return new XMLHttpRequest(); //Not IE

} else if(window.ActiveXObject) {

return new ActiveXObject("Microsoft.XMLHTTP"); //IE

} else {

alert("not supported");

}

}

接着将SOAP消息发送,XMLHttpRequest的readyState属性返回当前请求的状态,0表示未初始化,4表示上次数据接受完毕,这两个状态下都可以开始一个新的请求。然后通过open方法创建一个新的Http请求,并指定此请求的方法。通过onreadystatechange设置readyState属性改变时的事件处理句柄。示例代码:

function sendRequest(){

if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {

receiveReq.open("POST", "MyService.asmx", true);

//SOAP1.1

receiveReq.setRequestHeader ("Content-Type","text/xml; charset=utf-8")

receiveReq.setRequestHeader ("SOAPAction", "/Add") ;

var msg="<?xml version=\"1.0\" encoding=\"utf-8\"?>"

+"<soap:Envelope xmlns:xsi=\"/2001/XMLSchema-instance\"

+" xmlns:xsd=\"/2001/XMLSchema\"

+" xmlns:soap=\"/soap/envelope/\">"

+" <soap:Body>"

+"<Add xmlns=\"/\">"

+"<i>1</i>"

+"<j>2</j>"

+"</Add>"

+" </soap:Body>"

+"</soap:Envelope>"

receiveReq.onreadystatechange = handleAdd;

receiveReq.send(msg);}

}

示例代码中,setRequestHeader设置http封装格式,变量msg的内容就是SOAP1.1格式的消息请求,进行两个整数i和j的相加请求。将onreadystatechange设置为函数handleAdd,进行SOAP消息响应的处理。

最后是对SOAP消息响应的处理,readyState属性为4表示接受完毕,根据http请求状态status为200表示http响应成功,返回如果是字符串可以通过responseText属性获取,如果是xml文件可以通过responseXML属性获取。示例代码:

function handleAdd() {

if (receiveReq.readyState == 4) {

if (receiveReq.status==200){

// 对receiveReq的响应responseXML或responseText进行处理

} else {

alert("status:" + receiveReq.statusText);

}

}

}

4 结束语

本文中,介绍了基于SOAP协议架构WEB Service的步骤,但是这个过程没有提供安全性解决方案。对于一个真正安全的WEB Service来说,证书、密钥和加密同样是必不可少的。最健壮的WEB Service安全性源于实现了使用来自认证机构的私钥、公钥进行身份验证的加密消息传递。XML加密允许web服务用户发送保留XML格式的加密SOAP消息。

参考文献:

[1] W3C. SOAP:Simple Object Access Protocol Specification1.1 .2000.

[2] Nicholas C Zakas, Jeremy McPeak, Joe Fawcett. Professional Ajax .Wiley Publications, 2006.

[3] Christian Gross. Ajax Patterns and Best Practices[M]. Apress L P, 2006.

[4] 王东,孙彬. 基于Ajax的MVC框架的改造分析[J]. 计算机应用, 2007,(S1):293-295.

[5] 程亚娟, 赵政. XML数据存取技术[J]. 微型机与应用, 2002,(01):59-60.

[6] 张环宇,张建文. 基于AJAX技术的Web应用架构分析. 电脑知识与技术,2007,(15):745-746.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文