webservice soap wsdl

来源:互联网 发布:域名备案查询工具 编辑:程序博客网 时间:2024/06/05 10:29

webservice soap wsdl 之间的关系:

以前也曾经写过简单的WebService,但是并没有深入的研究,这两天看了园子里的一些文章,又请教了身边的高人,把SOAP、Web Service和WSDL的关系大概搞明白了,举例说明如下:

      X局有两个副局长A和B,A副局长分管财务,B副局长分管计划生育,但是A副局长是上海人,B副局长是广东人,两个人又都只会说自己家乡的方言,不会说普通话,这让下面的工作人员在请示汇报的时候非常困难,为了解决这个问题,局里的科员小c发明了一个表格,表格列出了需要向局长请示的问题以及说明这个问题所需要的数据等等(这个是SOAP的雏形),采用这种方式之后,工作人员就可以在需要向领导请示工作的时候直接填写表格,然后把表格交给相应的局长就可以了。后来X局的直属上级机关Y部的领导发现了这个方式,决定推广这种方式,将这种“表格描述问题”的方式升级为规范(或者称为“协议”),在所有Y部下属单位中执行,这个时候就是SOAP了。

      后来X局又出现了新的问题,科员小d到分管计划生育的B局长那里领TT(嘿嘿,yy一下),但是TT没有了,需要进行采购,这个时候就需要与分管财务的A局长打交道了,由于小d对工作流程不太了解,不知道A、B副局长在这个问题上分别承担什么职责,又产生了困难。这时小c再次发挥了他的聪明才智,他又发明了一种表格,这个表格专门说明某位领导分管什么工作,都有哪些职责(Web Service),在请示每个问题上应该提供什么样的材料和数据,会得到什么样的反馈,这个就是WSDL了。

 

     通过上面的例子,对SOAP/Web Service/WSDL关系说明如下:

  • Web Service实现业务诉求:Web Service是真正“办事”的那个。
  • WSDL提供“能办的事的说明”:我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型。
  • SOAP提供“请求”的规范:你想让人家办事,总得告诉人家你想干什么吧,SOAP就是定义这个“请求”的格式的,按照SOAP定义的“请求”格式“书写”请求就可以保证Web Service能够正确的解读你想让它干什么以及你为它提供了什么参数。在这个请求中,你需要描述的主要问题有:向哪个Web Service发送请求,请求的参数类型、参数值、返回值类型。这些都“填写”完毕,也就完成了符合SOAP规范的SOAP消息。

     

      以上是本人暂时对SOAP/Web Service/WSDL三者关系到目前为止的浅显理解,最后把两个缩写名词的英文给出来吧:

  • SOAP:Simple Object Access Protocol   调用远程服务的传输数据的格式,传输协议,编码规则。
  • WSDL:Web Services Description Language  远程服务的自描述文件,包括可以实现哪些功能,需要传递什么参数。
  • webservice : 远程服务的接口和实现类,发布出来就是远程服务。
  • 服务需要发布到大家都能访问的地方,这个地方叫UDDI 即 Universal Description,Discovery and Integration,这是一个目录服务,服务发布到这里,可以通过搜索查找到对应服务。

 

远程服务的实现方式 很多,可以是controller 可以是servlet, 但是 可以接收的参数类型 都是xml ,返回的结果也是 xml 格式。

soap协议是一种请求和应答协议规范,传输消息基于xml格式,传输协议是可以基于http的,但也可以基于其他的传输协议,如ftp、smtp等,

编码规则(Encoding Rules),用于表示应用程序需要使用的数据类型的实例

一般情况下都是基于http传输,但是由于 HTTP 协议本身的一些特点和局限性,

使得当 SOAP 使用HTTP 绑定的 Web 服务并不能满足某些企业应用的需求。

比如,HTTP 不是一个可靠传输协议,所以有可能在传输过程中出现问题,

然后 HTTP 协议基于Request/Response 模型,也就是说客户端需要在等待响应消息接收完成后才能继续执行,

而此时如果响应时间过长呢?

基于上面的这些需求,便需要选择合适的传输协议了。


 WebServices 的缺点

首先就是由于 XML 文件的难以解析,所以在使用 Web 服务的时候,会消耗较多的 CPU 和内存资源,

而后,SOAP 是基于XML 的,所以在网络传输中传输的是 XML 文件,

但是由 XML 文件相比于二进制文件来说,要大很多,自然就会消耗更多的网络资源了。

而后,由于通过 WSDL 解耦了Web 服务提供者和请求者,且 SOAP 消息时从发送者向接收者单向传送的,

这在一定程度上造成了 WebServices 是一种无状态服务,

尽管现在在 . Net 中可以通过 Session 来实现在客户端和服务端共享一些数据,

但是单单依靠 Session 来实现客户端和服务端的状态交互也太牵强了吧

WebServices 在数据绑定上也存在一些缺陷,

因为所有的数据在传输中都是使用的 XML 来实现的,

因此,需要在二进制数据和 XML 之间进行一个转换(通过序列化和反序列化来实现),

而在转换过程中有可能出现语义丢失的情况







0 0
原创粉丝点击