XMLHTTP与SOAP:
XML是web serivces的核心基础技术,是SOAP实现的关键所在;而XMLHTTP就是根据XML来设计的。从实现的方式上讲:XMLHTTP是基于浏览器的,只要有IE,就能实现向服务器传递XML字符串,具有很高的通用性。但是浏览器不是用来做XMLHTTP,它是面向大众用户浏览的,如果能用XML完成各种操作,必然会影响到用户。比如以前版本的msxml的对应浏览器,是可以访问客户端XML文档(初始时为XMLHTTP设计的),也就意味着可以通过XMLHTTP技术访问本地文件系统。后来microsoft把它定义为漏洞,现在就不行了。当然也可以编写客户端程序,只不过限于Visual 系列的程序,他们可以调用msxml中的API。但是服务端可以是asp,jsp/servlet都可以,都是把xml串变成xml文档对象。
SOAP是XML格式的通信协议,包含:SOAP封套定义了描述消息内容的约定,暗示了消息的处理方式;协议绑定提供了通过更底层协议传输SOAP 封套的一套通用机制;编码规则是把各种应用程序数据类型映射为基于标签的XML表示方法的约定;RPC机制提供了一个表示远程过程调用及其返回值的方法。它与其他的协议之间没有明确的关系,他本省就是一种协议。它可以与http.stmp,tcp等协议绑定。SOAP消息是XML文档,还可以带附件,它可以根据W3C定义的API,生成SOAP消息,当然microsoft的.net平台也支持SOAP。SOAP+HTTP和XMLHTTP相似,当它提供更好和更强大的实现功能,可拓展性和分布协作通信中的通用性,更重要的是它已成为Web Services和线路通信的关键技术。
SOAP和RMI,CORBA,COM
RMI和COM都是分布式应用的实现方式,它们定义组件之间的通信。由于它们只是一个体系(例如用Java写的一系列程序)下程序之间的通信约定,而且通信需要特定的平台支持,除了本体系之内的通信是高效之外,不能与别的体系下的程序。
CORBA就是为了解决这种通信问题,设计了代理请求模型(利用IDL语言),这样能够彼此之间的通信,但这样好像是修补,不能解决根本问题,是系统变得越来越复杂,而且用CORBA仅仅在挽回旧系统的使用价值有效果。他们都不能透过防火墙的。SOAP+HTTP是防火墙的友好协议,能够透过防火墙的。
SOAP是一种与具体实现无关的协议,基于XML格式,传输XML格式的数据,使得系统变得松散。这样在应用中利用XML的可读性,解析XML文档,来实现应用,大大的提高了系统的互操作性(与不同的系统之间的通信)。而且系统中各个单元业务逻辑清楚,这样就具有很高的可移植性和可重用。
UDDI与JNDI
UDDI是服务的注册管理协议,UDDI注册中心是用来注册服务的,用户可以通过WSDL来进行服务注册,客户通过在UDDI注册中心上查找服务,获得WSDL文档,根据WSDL文档,获取访问服务的方法,从而用SOAP与服务进行通信。它可以通过数据库来实现,也可以用开源或公司(IBM等)的,使用XML来表现。当用户查询,其细节可以由XML格式的信息返回。其访问程序不过是一个层次向下的查找的过程。它注册的服务是通用的,与平台无关,而且注册的方式是通用的XML的格式。它可以面向Internet,或Interanet为各种用户,提供各种各样的服务。
JNDI是Java服务命名目录,它以树的形式记录了EJB,DataSource的访问目录,程序可以通过JDNI和RMI来定位服务。具体的通过它们的部署文件,当服务器启动后,它根据部署文件自动建立JNDI,支持RMI和命名服务的查询(由服务器自己实现)。然后RNI就可以访问这些组件。它的思想和UDDI基本差不多,但它与具体的体系平台绑定,而且是由服务(与程序相关,严格不应该叫服务,应该说是组件)完全绑定,实现方式简单。因此 UDDI相对于JNDI,更动态,更易操作.
WSDD与EJB的配置文件
对于CMP型的实体bean,WSDD与其配置文件有相似之处,但是它描述数据与数据库形成映射,不涉及方法,有服务器系统底层实现访问方法。而WSDD定义服务的访问接口,有支持web services的系统底层进行识别接口,传送数据等。