当前位置 : 主页 > 网页制作 > Nodejs >

WebService学习之路二

来源:互联网 收集:自由互联 发布时间:2021-06-24
这里主要是对昨天的简单的WS示例生成的wsdl进行简单的分析。 很多节点的意思都是自己的理解,也有简单的参考外面的文档,可能名称描述不是很合理或者意思理解有误, 也有部分不

这里主要是对昨天的简单的WS示例生成的wsdl进行简单的分析。

很多节点的意思都是自己的理解,也有简单的参考外面的文档,可能名称描述不是很合理或者意思理解有误,

也有部分不明白的地方,也希望有看到的朋友指明不足的地方和我描述的疑问。感激不尽。

 

WebService学习之路一:  http://trylin.iteye.com/blog/1906819

 

二、理解WSDL

    wsdl中有类似java对象的引用关系,通过wsdl我们可以知道此服务对外的地址,方法,以及方法的输入输出参数类型等。

访问我们发布的WS http://localhost:8888/WS?wsdl 

 

 Wsdl的元素根节点是 definitions,从单词的意思可以看出是对整个wsdl文件的解释。

 xmlns:tns=http://impl.service.ws.trylin.com/  xml命名空间

 targetNamespace="http://impl.service.ws.trylin.com/".//表示下面的节点都是指向的这个命名空间

name="TestImplService"  //整个wsdl 的一个命名  这里默认是服务名  

definitions下有

<import namespace="http://service.ws.trylin.com/" location="http://localhost:8888/WS?wsdl=1"/>

这个理解为xml导入并给定命名空间,location为xml地址,下面会对这个导入的xml简单理解。

 

definitions子元素的定义主要包含两部分

<!--[if !supportLists]-->1、  <!--[endif]-->具体定义

<!--[if !supportLists]-->2、  <!--[endif]-->抽象定义

 参考:http://www.blogjava.net/baoyaer/articles/116413.html

1、具体定义

 

 通过具体定义,可以简单的看到服务对外的服务名称和服务方法。

1.1、binding 

xmlns:ns1=” http://service.ws.trylin.com/”  相当与引用一个命名空间下的xml元素

type="ns1:ITest"   type类型  ns1对应上面的空间名,表示这个ITest是属于ns1指向的空间中定义的类型

soap:binding声明将把 SOAP 作为绑定和传输服务使用  style属性可选 rpc/ document 

operation 表示服务发布的几个方法

input /output分别指的是方法的输入输入 其中soap:body use="literal"  use的取值也是可选的 literal/ encoded

关于 soap:binding中的style属性 和 soap:body中的use属性的区别,我没能理解,希望有人看懂后,指点一下

参考的链接:http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/

1.2、service 

这个节点主要是对发布服务的描述 name属性 表示对外发布的服务名称

Port 服务端口声明  binding="tns:TestImplPortBinding" 这里是指向我们之前看到的binding对象。soap:address 服务对外的地址。

 

2、抽象定义

通过抽象定义,可以具体的了解到服务对外的一些具体信息,比如包含的那些类型的数据,方法的参数,返回值等等。

找到<import namespace="http://service.ws.trylin.com/" location="http://localhost:8888/WS?wsdl=1"/>

在浏览器中输入 http://localhost:8888/WS?wsdl=1 回车



 2.1、Types

         Types表示的是类型,从xsd:import 可以看出 这里又是一个引用的一个schema

浏览器中输入schemaLocation中的 http://localhost:8888/WS?xsd=1



 <xs:element name="add" type="tns:add"/>

<xs:element name="addResponse" type="tns:addResponse"/>

这里表示的是服务对外的方法的 输入输出对象,找到引用的 tns:add  tns:addResponse

<xs:complexType name="add">

<xs:sequence>

<!—arg表示输入对象的参数 0表示顺序  arg0不便于理解,后面会介绍怎么改变参数的名称

参数类型是 type int-->

<xs:element name="arg0" type="xs:int"/>

<xs:element name="arg1" type="xs:int"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="addResponse">

<xs:sequence>

<!—return表示返回  返回类型是int -->

<xs:element name="return" type="xs:int"/>

</xs:sequence>

</xs:complexType>

这里对输入输出对象的简单描述

 

2.2、Message

Message是对服务对外方法的描述,每一个方法分输入和输出两部分

<message name="add">

<part name="parameters" element="tns:add"/>

</message>

<message name="addResponse">

<part name="parameters" element="tns:addResponse"/>

</message>

Element=”tns:add”这里把具体的描述指向了 Types中的元素。

 

3、portType

PortType  服务类的具体定义  name定义的类型名称

operation name="add" 定义的方法

<input message="tns:add"/>

<output message="tns:addResponse"/>

Input方法的输入类型 

output 方法的输入类型

 

大概的描述,自己整理起来也有点混乱的感觉

尤其是 关于 soap:binding中的style属性 和 soap:body中的use属性的区别(各位知道的话,请不要吝啬哦,打几个字,在回复中告诉我,谢谢。呵呵。。。)

关于这里,我想以后还得回过头查下相关的资料,先把全部的视频看完,在把自己的一些疑问一个个解决,

不求一次性全部理解,囫囵吞枣的过一遍,然后在仔细的再看一遍,这可能也是一种好的学习方法。

网友评论