扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者