当前位置:   article > 正文

WebService原理简述

8266 webservice
Web Service 是一种可以接收从internet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在WEB上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

Web Service四大组成部分:
1、XML 扩展型可标记语言,其是WebService表示数据的基本格式,是Web Service标准的基础及核心。

2、SOAP 简单对象访问协议,是一种基于XML的轻量级消息交换协议。利用SOAP可以在两个或多个对等实体之间进行信息交换,并可以使这些实体在分散的分布式应用程序中相互通信。

3、WSDL Web Service描述语言,其是一种XML格式,用于描述网络服务及其访问信息。WSDL用于定义Web服务的元数据语言,描述服务提供方和请求方之间如何进行通信。大多数情况下由软件自动生成和使用。

4、UDDI 通用描述、发现与集成服务,UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。

1.WSDL: Web服务定义语言(Web Service Definition Language),用来定义服务接口。实际上,它能描述服务的两个不同方面:服务的签名(名字和参数),以及服务的绑定和部署细节(协议和位置)。
2.SOAP:简单对象访问协议(Simple Object Access Protocol),是定义Webservice的协议。HTTP是一个网络数据交互的底层协议,而SOAP是Web Service数据交换的专用协议。
3.UDDI:通用描述、发现与集成服务(Universal Description, Discovery and Integration),UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。
SOAP是协议,就像HTTP协议一样,一般框架都已经集成;
UDDI扮演者补充的角色,非必须,而且通常在实践中也不用。
WSDL是开发人员打交道最多的东西,也算是Webservice的核心了。


Web Service原理模型

[img]http://dl2.iteye.com/upload/attachment/0114/4545/b571a622-8810-3b38-a4ed-15c81af82666.jpg[/img]


Web Service服务:简单的说,Web服务是一个URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知道所请求的服务是怎样实现的。


Web Service的体系结构是基于:Web服务提供者、Web服务请求者、Web服务中介者三个角色和发布、发现、绑定三个动作构建的。

Web服务提供者:是Web服务的拥有者,它耐心等待为其他服务和用户提供自己已有的功能;

Web服务请求者:是Web服务的使用者,它利用SOAP消息向Web服务提供者发送请求以获得服务;

Web服务中介者:是把一个Web服务请求者与合适的Web服务提供者联系在一起,它充当管理者的角色,一般是UDDI。

发布 : 是为了让用户或其他服务知道某个Web服务的存在和相关信息;

查找 : 是为了找到合适的Web服务服务;

绑定 : 是在提供者与请求者之间建立某种联系。


实现一个完整的Web服务包括以下步骤:

◆ Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)

◆ Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)

◆ Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)

◆ 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)

◆ Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)

webservice 的调用有3种方式

1). httpget
2). httppost
3). httpsoap

soap 的优点是 可以传递结构化的 数据,而前两种不行。
soap 最终也是使用 HTTP 传送 XML。


在Webservice中的安全主要分为以下三个方面。

传输 SSL/HTTPS 对连接加密,而不是传输数据

消息 数据加密(XML Encryption) 数字签名(XML-DSIG)

底层架构 利用应用服务安全机制

传输时的安全是最容易被加入到你的Webservice应用中的,利用现有的SSL 和HTTPS协议,就可以很容易的获得连接过程中的安全。

然而这种安全实现方法有两个弱点。一是它只能保证数据传输的安全,而不是数据本身的安全,数据一旦到达某地,那么就可以被任何人所查看。而在Webservice中,一份数据可能到达多个地方,而这份数据却不该被所有的接受者所查看。二是它提供的是要么全有要么全无的保护,你不能选择哪部分数据要被保护,而这种可选择性也是在Webservice中所常要用到的。

第二层的保护是对于消息本身的保护。你可以使用已有的XML安全扩展标准,实现数字签名的功能,从而保证你的消息是来自特定方并没有被修改过。XML文件的加密技术从更大程度上加强了Webservice的安全,它能够定制数据传输到后,能否被接受者所查看,进一步完善了传输后的安全,业界也在不断的制定Webservice的安全标准,比如SAML 和 WS-Security。

最后一层保护就是依靠底层架构的安全,这更多的来自于操作系统和某些中间件的保护。比如在J2EE中,主持Webservice的应用服务器。目前很多的J2EE应用服务器都支持Java Authentication and Authorization Service (JAAS),这是最近被加入到J2SE 1.4当中的。利用主持Webservice的服务器,实现一些安全机制这是很自然的做法。另一种利用底层架构的安全方法就是,做一个独立的负责安全的服务器,Webservice的使用者和创建者都需要与之取得安全信任。


Soap消息格式
<?xml version="1.0"?><soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"><soap:Header>  <m:Trans xmlns:m="http://www.w3schools.com/transaction/"  soap:mustUnderstand="1">234  </m:Trans></soap:Header><soap:Body>  <m:GetPrice xmlns:m="http://www.w3schools.com/prices">    <m:Item>Apples</m:Item>  </m:GetPrice></soap:Body></soap:Envelope>


cxf简单案例:
package com.hsy.server;  import java.util.List;  import javax.jws.WebParam;  import javax.jws.WebService;  import com.hsy.pojo.User;  @WebService  public interface HelloWorld {      String sayHi(@WebParam(name="text")String text);      String sayHiToUser(User user);      String[] SayHiToUserList(List<User> userList);  }  package com.hsy.server;  import java.util.LinkedHashMap;  import java.util.List;  import java.util.Map;  import javax.jws.WebParam;  import javax.jws.WebService;  import com.hsy.pojo.User;  @WebService(endpointInterface="com.hsy.server.HelloWorld",serviceName="HelloWorld")  public class HelloWorldImpl implements HelloWorld {      Map<Integer, User> users = new LinkedHashMap<Integer, User>();      public String sayHi(@WebParam(name = "text") String text) {          return "Hello,"+text;      }      public String sayHiToUser(User user) {          users.put(users.size()+1, user);          return "Hello,"+user.getName();      }      public String[] SayHiToUserList(List<User> userList) {          String[] result = new String[userList.size()];          int i = 0;          for(User u:userList){              result[i] = "Hello " + u.getName();              i++;          }          return result;      }      /**      * @param args      */      public static void main(String[] args) {          // TODO Auto-generated method stub      }  }  package com.hsy.server;  import javax.xml.ws.Endpoint;  public class webServiceApp {      /**      * @param args      */      public static void main(String[] args) {           System.out.println("web service start");           HelloWorldImpl implementor = new HelloWorldImpl();           String address = "http://localhost:8080/helloWorld";           Endpoint.publish(address, implementor);           System.out.println("web service started");      }  }  package com.hsy.client;  import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  import com.hsy.pojo.User;  import com.hsy.server.HelloWorld;  public class HelloWorldClient {      /**      * @param args      */      public static void main(String[] args) {          //首先右键run as 运行com.hsy.server.webServiceApp类,然后再运行这段客户端代码          JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();          jwpfb.setServiceClass(HelloWorld.class);          jwpfb.setAddress("http://localhost:8080/helloWorld");          HelloWorld hw = (HelloWorld) jwpfb.create();          User user = new User();          user.setName("name");          user.setDescription("toName");          System.out.println(hw.sayHiToUser(user));      }  }  
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/524635
推荐阅读
相关标签
  

闽ICP备14008679号