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?
Leave a comment