科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件为你的网络服务制作文档

为你的网络服务制作文档

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

一个网络服务的文档需要包含许多不同的元件。首先并且是最初,它应该提供一个有计划地描述网络服务的网络服务描述语言(WSDL)文件......

作者:佚名 来源:Microsoft 2007年11月5日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
自定义类型

  WSDL文档可以定义消息所使用的类型。当定义自定义类型时,你应该使用XSD来代替其他类型定义语言。使用XSD允许你更简单地使用WSDL相关的工具箱。这也帮助那些也许必须手工生成定制客户的人。但是,如果你看到需要定义呢自己的类型系统,你也许会-但是我不推荐。

  类型在类型模块中列出。使用这个,你可以映射你自己的语言规范,为XSD请求自定义类型。如果一个棒球队希望得到一个队员的名称、平均击球、年平均击球数和队员编号,他们就应该按下面的类型定义来定义:

<types>
<s:complexType name="Player">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Name" nillable="true"
type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="Average"
type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="Year" type="s:long" />
<s:element minOccurs="1" maxOccurs="1" name="Number"
type="s:short" />
</s:sequence>
</s:complexType>
</types>

  这里使用了一些XML名称域,它们在文档的其他地方定义。这里要注意的重要事情是,我们有一组定义队员的元件的名称。复杂的类型Player 现在被定义了,并且可以北映射到任何不同的语言中。这种类型也指定我们怎样才能在通信时对Player 进行序列化。如果使用在一个消息中,这个元件将像下面的样子:

<message name="PlayerMessage">
<part name="thePlayer" element="s0:Player" />
</message>
portTypes 和Bindings

  WSDL也可以既对一个给定的portType 上的操作又为详细绑定的数据创建文档。相关的操作应该存在于一个给定的portType 中。这些操作间的关系代表性地用实现它们的语言片断定义。例如,如果一个COM对象和Java类给出5个方法作为网络服务,这5个方法一起来定义portType 。每个portType 都有一个匹配的binding 元件。这个binding 元件可以被用来定义portType中的每个operation 如何映射到特殊的协议中。你也许有一个按照下面定义的portType :

<portType name="PlayerStats">
<operation name="GetBattingAverage">
<input message="s0:GetBattingAverageIn" />
<output message="s0:GetBattingAverageOut" />
</operation>
</portType>

  这个portType 也许被许多方法所支持(重新调用那个网络服务可以通过许多协议,包括SOAP、HTTP GET和HTTP POST)。一个对SOAP的binding 也许像这样:

<binding name="PlayerStatsSoap" type="s0:PlayerStats">
<soap:binding transport=http://schemas.xmlsoap.org/soap/http
style="document" />
<operation name="GetBattingAverage">
<soap:operation
soapAction="http://www.seattlemariners.org/GetBattingAverage"
style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>

  这个binding 元件表明这个操作将在HTTP上使用SOAP来传输。GetBattingAverage 操作使用HTTP SOAPAction 头,http://www.seattlemariners.org/GetBattingAverage 。这个操作是面向文档的并且使用文字编码。

  我们也可以定义特定服务的结束点在哪。如果这个结束点可以通过一些不同的绑定来达到,例如SOAP,HTTP GET和HTTP POST,这个服务片断就会像这样:

<service name="PlayerStats">
<documentation>Gets player information for the Seattle
Mariners.</documentation>
<port name="PlayerStatsSoap" binding="s0:PlayerStatsSoap">
<soap:address
location="http://someIP/baseball1/baseballservice.asmx" />
</port>
<port name="PlayerStatsHttpGet" binding="s0:PlayerStatsHttpGet">
<http:address
location="http://someIP/baseball1/baseballservice.asmx" />
</port>
<port name="PlayerStatsHttpPost" binding="s0:PlayerStatsHttpPost">
<http:address
location="http://someIP/baseball1/baseballservice.asmx" />
</port>
</service>

  这个特殊服务描述指出了相同的结束点,http://someIP/baseball1/baseballservice.asmx ,可以处理所有三个绑定。你也可以使用这个片断来在不同的地方描述相同的结束点。

<service name="PlayerStats">
<port name="PlayerStatsUSA" binding="s0:PlayerStatsSoap">
<soap:address
location=
"http://someIPInUSA/baseball1/baseballservice.asmx" />
</port>
<port name="PlayerStatsJapan" binding="s0:PlayerStatsSoap">
<soap:address
location=
"http://someIPInJapan/baseball1/baseballservice.asmx" />
</port>
</service>
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章