Web service 入门

| No Comments | No TrackBacks

Web service
=================================================================================
  * 目的是支持跨网络的异构系统间的相互操作
  * Web Service 分为两大阵营:Big Web Services v.s. RESTful Web Services
  * Big Web Services 使用遵从 SOAP 协议的 XML 交换信息,服务方要提供 WSDL,一般大型系统使用
  * RESTful Web Services,不使用 SOAP 协议,而通过 HTTP 协议。因此也无需 WSDL 和 XML。
  * SOAP、UDDI 都是 WS-I 组织制定的标准。这些标准的集合被称为 WS-I Basic Profile。

  使用形式:有三种
  * RPC Web services
    ! RPC = Remote procedure calls,以远程调用接口的形式提供 Web Service。
    ! WSDL 的作用是定义服务支持的操作(operation)
    ! 缺点是与开发语言不够独立,已经被剔除出 WS-I Basic Profile。
  * SOA: Service-oriented architecture
    ! 异构系统间的通信单元是消息(Message),而非操作(Operation)。
    ! 因此称为消息导向的服务("message-oriented" services)
    ! 松耦合
    ! 在 SOA 中,WSDL 的作用就像通信双方的一份合同
  * Representational state transfer
    ! 使用简单的协议,简单的操作(例如 GET, POST, PUT, DELETE for HTTP)
    ! 交互时可通过 SOAP XML、或 SOAP 对象抽象、或根本不用 SOAP

  * 异同
    ! 相同点:都用 WSDL 描述服务交互方式。
    ! 不同点:交互时交换的信息不同,依次为:操作、消息、有状态的对象

  和 Web Service 作用类似的架构
    * RMI
    * CORBA
    * DCOM

 

SOAP
=================================================================================
  一般概念
  * Simple Object Access Protocol
  * 交换结构化信息的协议
  * 基于 XML
  * 使用应用层协议,例如 RPC、HTTP
 
  用法:
  * SOAP 消息发送到 Web service,其中包含服务需要的参数
  * Web service 后台处理
  * 结果以 XML 形式返回

  SOAP architecture 的层次
  * message format。一般是 XML
  * message exchange patterns (MEP)
  * underlying transport protocol bindings。传输层:一般用 Internet application layer protocol(例如 HTTP)
  * message processing models
  * protocol extensibility

  * endpoint 端点,即交互的接口点。对 SOA 来说是 Message,对 REST 来说是从程序代码中内省(introspection,我理解是自动生成)出

来的 WSDL 和 接口 API
  * enveloping 封装

 

SOA
=================================================================================
  两种功能
  * 系统开发:
    ! 使系统功能成为服务(隐藏下层实现)
    ! 从而使服务松耦合
    ! 从何适应变化(例如使流程易于改变。重新组织服务即改变流程。)
  * 集成:异构系统数据交换

  两种交互类型:
  * 交换数据
  * 协调行为(Activity)

  SOA 开发的边际成本
  * The great promise of SOA suggests that the marginal cost of creating the n-th application is zero, as all of the software

required already exists to satisfy the requirements of other applications.
 
  Web Service 用于实现 SOA
  * service provider creates a Web service
  * UDDI 是服务代理,Web service 注册到 UDDI 后,用户就知道有哪些服务被提供了

  Service contract 包含的内容
  * Service Operations - Methods, actions etc. Must be defined in terms of what part of the functionality it provides.
  * Invocation - Indicates the invocation means of the service. This includes the URL, interface, etc.

 

WSDL
=================================================================================
  一般概念
  * pronounced 'wiz-dol'
  * 基于 XML
  * 用于描述 Web Service

  * 抽象层:Messages、Port types
  * 实现层:Port、Binding

  * Message: are abstract descriptions of the data being exchanged
  * Port types: are abstract collections of supported operations.
  * Port: is defined by associating a network address with a reusable binding
  * Binding: concrete protocol and data format specifications for a particular port type

 

解析中山 SAP 巡检接口的 WSDL
=================================================================================
从 WSDL 中读取的信息:

Service
  service name:ZS_XJ

Port
  port name:ConfigPort_Document
  对应的 binding:ConfigBinding

Binding
  binding name:ConfigBinding
  transport:协议为 SOAP
 
  operation
    operation name:hello
    input:
    output:

Port Type
  Operation
  input message 的 Schame
  output message 的 Schame


WSDL 应该包含的信息

<wsdl:definitions>
  <wsdl:types>...</wsdl:types>
  <wsdl:message>...<wsdl:message/>
  <wsdl:portType>...</wsdl:portType>
  <wsdl:binding>...</wsdl:binding>
  <wsdl:service>...<wsdl:service>
<wsdl:definitions>

 

首先是:http://10.151.33.42:50100/ZS_XJ/Config?wsdl
* 是个 XML 文档
* 第一句为 XML 声明
* wsdl:definitions 说了命名空间
* wsdl:import 引用了另一个 XML:http://10.151.33.42:50100/ZS_XJ/Config/bindings?wsdl。用于描述 bindings
* wsdl:service 描述了一个 Service,包括 Service 的名字和 port


<?xml version="1.0" encoding="UTF-8" ?>

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="ZS_XJWsd" targetNamespace="urn:ZS_XJWsd"

xmlns:bns0="urn:ZS_XJWsd/Config/document" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">

<wsdl:import location="http://10.151.33.42:50100/ZS_XJ/Config/bindings?wsdl&style=document"

namespace="urn:ZS_XJWsd/Config/document" />

<wsdl:service name="ZS_XJ">
  <wsdl:port name="ConfigPort_Document" binding="bns0:ConfigBinding">
    <soap:address location="http://10.151.33.42:50100/ZS_XJ/Config?style=document" />
  </wsdl:port>
</wsdl:service>
 
</wsdl:definitions>


之后是:http://10.151.33.42:50100/ZS_XJ/Config/bindings?wsdl
* 同样是个 XML 文档,本文档描述 bindings
* 引用了 http://10.151.33.42:50100/ZS_XJ/Config/porttypes?wsdl&style=document 用于描述 port type

<?xml version="1.0" encoding="UTF-8" ?>

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:ZS_XJWsd/Config/document"

xmlns:prt0="urn:ZS_XJWsd/ZS_XJVi/document" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">

<wsdl:import location="http://10.151.33.42:50100/ZS_XJ/Config/porttypes?wsdl&style=document"

namespace="urn:ZS_XJWsd/ZS_XJVi/document" />

<wsdl:binding name="ConfigBinding" type="prt0:ZS_XJVi_Document">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
  <wsdl:operation name="hello">
    <soap:operation soapAction="" />
      <wsdl:input>
        <soap:body use="literal" parts="parameters" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
  </wsdl:operation>
</wsdl:binding>

</wsdl:definitions>


最后是:http://10.151.33.42:50100/ZS_XJ/Config/porttypes?wsdl
* 还是个 XML 文档,本文档描述 port type
* types 好像是个声明,其中可能声明了两个 Schema,这两个 Schema 在 portType 里引用了
  ! hello
  ! helloResponse
* 两个 Message
  ! 名称分别为 helloIn_doc 和 helloOut_doc
  ! 内容分别为 hello 和 helloResponse
* 一个 portType,其中包括:
  ! operation
  ! input message
  ! output message


<?xml version="1.0" encoding="UTF-8" ?>

  <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns0="urn:ZS_XJVi"  

targetNamespace="urn:ZS_XJWsd/ZS_XJVi/document" xmlns:tns="urn:ZS_XJWsd/ZS_XJVi/document">

  <wsdl:types>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ZS_XJVi" xmlns:tns="urn:ZS_XJVi"

elementFormDefault="qualified">

      <xs:element name="hello">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string" nillable="true" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="helloResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Response" type="xs:string" nillable="true" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>

  </wsdl:types>

  <wsdl:message name="helloIn_doc">
    <wsdl:part name="parameters" element="ns0:hello" />
  </wsdl:message>

  <wsdl:message name="helloOut_doc">
    <wsdl:part name="parameters" element="ns0:helloResponse" />
  </wsdl:message>

  <wsdl:portType name="ZS_XJVi_Document">
    <wsdl:operation name="hello">
      <wsdl:input message="tns:helloIn_doc" />
      <wsdl:output message="tns:helloOut_doc" />
    </wsdl:operation>
  </wsdl:portType>

</wsdl:definitions>

 


根据 WSDL 的定义,Pervasive 发送的请求为:

<?xml version="1.0" encoding="UTF-8" ?>
<wsreq:Request xmlns:wsreq="http://www.pervasive.com/schemas/gen/wsrequest.xsd" xmlns:ns0="urn:ZS_XJVi">
  <wsreq:Parameter>
    <ns0:hello>
      <ns0:name>doPe</ns0:name>
    </ns0:hello>
  </wsreq:Parameter>
</wsreq:Request>

其中 4-6 为 WSDL 要求的内容;
其余为 Pervasive 的要求。第二行 xmlns:ns0="urn:ZS_XJVi" 是根据 WSDL 的定义添加的 namespace

 

参考
=================================================================================
[1] Web service
    http://en.wikipedia.org/wiki/Web_service
[2] SOAP
    http://en.wikipedia.org/wiki/SOAP
[3] WSDL,Web Services Description Language
    http://en.wikipedia.org/wiki/Web_Services_Description_Language
[4] Web Services Interoperability Organization (WS-I)
    http://en.wikipedia.org/wiki/WS-I
[5] UDDI Universal Description Discovery and Integration
    http://en.wikipedia.org/wiki/UDDI
[6] SOA,Service-oriented architecture
    http://en.wikipedia.org/wiki/Service_Oriented_Architecture
[]  使用 WSDL. WSDL 包含的信息
    http://msdn.microsoft.com/zh-cn/library/ms175476.aspx


问题
=================================================================================
[1] Pervasive 如何从 WSDL 里自动生成 request XML?

No TrackBacks

TrackBack URL: http://www.zw1840.com/mt/mt-tb.cgi/14

Leave a comment

About this Entry

This page contains a single entry by zw1840 published on March 17, 2009 12:58 PM.

GRANT was the previous entry in this blog.

SAP 中与台帐相关的数据概况 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.