﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-灵魂-放水-随笔分类-Web Services&amp;SOA</title><link>http://www.blogjava.net/zqli/category/28420.html</link><description>为学日益，为道日损。</description><language>zh-cn</language><lastBuildDate>Mon, 24 Mar 2008 10:58:05 GMT</lastBuildDate><pubDate>Mon, 24 Mar 2008 10:58:05 GMT</pubDate><ttl>60</ttl><item><title>[转]Axis1.2 下SOAPMonitor问题的解决 </title><link>http://www.blogjava.net/zqli/archive/2008/03/24/188268.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 24 Mar 2008 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/03/24/188268.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/188268.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/03/24/188268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/188268.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/188268.html</trackback:ping><description><![CDATA[<font size="2">Axis1.2＋Jdk1.5＋Tomcat5.5.12 ，安装成功以后，SOAPMonitor能启动，但是红字的一串信息：The SOAPMonitor is unable&nbsp;to&nbsp;communicate with the server. 就表示启动不成功，折腾几天，google查找了好多信息，也没有一个确切的说法，国内有人说版本问题，似乎axis1.2只适用于jdk1.4或是tomcat5.0版本，还真试过改了，也没有效果，在java控制台上有提示非法的本地主机地址。一次偶然的机会，让我知道该改哪个数据了。（同一台机器上安装多个tomcat，相同的端口再现冲突时就需要对端口进行更改）<br />
可能是默认的5001端口被占用，将axis\WEB-INF下的web.xml文件中的SOAPMonitor的端口默认的5001改为其他的不会出现冲突的端口，问题解决。<br />
唉，有时一个不起眼的问题也能折腾死人，解决后只会一声叹息。</font> <br />
<br />
<font size="2">&nbsp;在tomcat容器下自创建的web应用中也启动axis服务，想要添加SOAPMonitor的方法是：<br />
<font color="#0000ff">1、编译<br />
</font>&nbsp;将axis根目录下的SOAPMonitorApplet.java文件复制到web应用的根目录下，编译此文件同时将生成的类文件复制到应用根目录下的WEB-INF目录下。<br />
<font color="#0000ff">2、修改web.xml文件</font><br />
修改WEB-INF目录下的web.xml文件，添加两个元素&lt;servlet&gt;和&lt;servlet-mapping&gt;，具体内容如下：<br />
&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;SOAPMonitorService&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;SOAPMonitorService&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.axis.monitor.SOAPMonitorService<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;SOAPMonitorPort&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;5005&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;100&lt;/load-on-startup&gt;<br />
&nbsp; &lt;/servlet&gt;<br />
&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;SOAPMonitorService&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/SOAPMonitor&lt;/url-pattern&gt;<br />
&nbsp; &lt;/servlet-mapping&gt;<br />
<font color="#0000ff">3、修改server-config.wsdd文件</font><br />
配置文件中添加soapmonitor的配置信息如：<br />
&lt;handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler"&gt;<br />
&nbsp; &lt;service name="SOAPMonitorService" provider="java:RPC"&gt;<br />
&nbsp; &lt;parameter name="allowedMethods" value="publishMessage"/&gt;<br />
&nbsp; &lt;parameter name="scope" value="Application"/&gt;<br />
&nbsp; &lt;parameter name="className" value="org.apache.axis.monitor.SOAPMonitorService"/&gt;<br />
&nbsp;&lt;/service&gt;<br />
对于需要被soapmonitor监控的web服务，在其服务设置中添加信息如下<br />
&lt;service name="TestAdding" provider="java:RPC"&gt;<br />
&nbsp; &lt;parameter name="allowedMethods" value="getAdd"/&gt;<br />
&nbsp; &lt;parameter name="className" value="test.TestAdding"/&gt;<br />
&nbsp;&nbsp; &lt;requestFlow&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;handler type="soapmonitor"/&gt;<br />
&nbsp;&nbsp; &lt;/requestFlow&gt;<br />
&nbsp;&nbsp; &lt;responseFlow&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;handler type="soapmonitor"/&gt;<br />
&nbsp;&nbsp; &lt;/responseFlow&gt;<br />
&nbsp;&lt;/service&gt;<br />
<font color="#0000ff">4、运行测试<br />
</font><a href="http://localhost:8080/TestAdding/SOAPMonitor">http://localhost:8080/TestAdding/SOAPMonitor</a>&nbsp;<br />
<img height="600" alt="Test_soapmonitor.bmp" src="http://www.blogjava.net/images/blogjava_net/gabengdou/Test_soapmonitor.bmp" width="800" border="0" /><br />
呵呵，好不容易折腾好了，看来原来的想法还是对的，只不过在配置文件时出了问题。</font> 
<img src ="http://www.blogjava.net/zqli/aggbug/188268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-03-24 16:04 <a href="http://www.blogjava.net/zqli/archive/2008/03/24/188268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>借助WSE3.0研究WS-Addressing规范。</title><link>http://www.blogjava.net/zqli/archive/2008/01/11/174521.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 11 Jan 2008 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/01/11/174521.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/174521.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/01/11/174521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/174521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/174521.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; cnblogs里有篇帖子<a href="http://idior.cnblogs.com/articles/436801.html">http://idior.cnblogs.com/articles/436801.html</a>（<a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/idior/articles/436801.html">Applied WSE 3.0 to Web Service Project </a>），对于学习WS-Addressing是篇不错的帖子。按照此贴的方法进行，在追踪Soap消息时，抛出异常。在未开启Client端WSE功能时，Soap Toolkit 3.0能追踪到soap消息，而且，response显示了wse的特性。<br />
<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了使用Soap Toolkit 3.0，我们在WS client端输入的目标地址为：<a href="http://localhost:8080/WSEWebService/Service.asmx">http://localhost:8080/WSEWebService/Service.asmx</a>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Soap Toolkit 3.0设置为：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Listen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Local port:8080<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward to<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination:localhost<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination:80<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 之所以这样设置，因为在IIS里设置的本机Web Services为：<a href="http://localhost:8080/WSEWebService/Service.asmx">http://localhost:80/WSEWebService/Service.asmx</a>。Soap Toolkit&nbsp;在8080端口监听来自client端的消息，并将消息递交到IIS监听的80端口。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可当开启client端wse功能时，抛出如下异常：
<fieldset style="width: 1026px; height: 171px">
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">Microsoft.Web.Services3.Addressing.AddressingFault: Destination Unreachable ---&amp;gt; System.Exception: </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">WSE816: </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">The &amp;lt;To&amp;gt; header must match the value of an incoming message's HTTP Request Url if the soap receiver does not have an actor name. </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">The &amp;lt;To&amp;gt; header received contained "http://localhost:8080/WSEWebService/Service.asmx" </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">while the HTTP Request Url was "http://localhost/WSEWebService/Service.asmx".</span></p>
</fieldset><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看&nbsp;Soap Toolkit&nbsp;监听到的SOAP消息可以发现，Request消息的SoapHeader中,&nbsp;目标地址仍然为<span class="m">&lt;</span><span class="t">wsa:To</span><span class="m">&gt;</span><span class="tx"><a href="http://localhost/WSEWebService/Service.asmx">http://localhost:8080/WSEWebService/Service.asmx</a></span><span class="m">&lt;/</span><span class="t">wsa:To</span><span class="m">&gt;</span> ，而不是<span class="m">&lt;</span><span class="t">wsa:To</span><span class="m">&gt;</span><span class="tx"><a href="http://localhost/WSEWebService/Service.asmx">http://localhost:80/WSEWebService/Service.asmx</a></span><span class="m">&lt;/</span><span class="t">wsa:To</span><span class="m">&gt;.因此，destination不可达，抛出如上异常。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在网上查了资料发现：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;
<p style="margin: 0in 0in 0pt">WS-Addressing moves the destination URL of the message into the message to enable routing and scenarios where messages are delivered over multiple protocols. Before WS-Addressing the URL of the destination was only available in the protocol part of the message. Is you were sending a SOAP message over HTTP, the URL was stored in the HTTP part of the message. You had no access to the URL from within your SOAP processor &#8211; unless your Web server vendor chose to give you access to the HTTP headers.</p>
<p style="margin: 0in 0in 0pt">Now with WS-Addressing built into WSE, the Web service platform can actually determine if a message was indeed intended for the service that received it because WSE adds the &lt;to&gt; element to the header of the SOAP message:</p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsa:To xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;</span></p>
<p style="margin: 0in 0in 0pt 0.5in"><span style="font-size: 8pt; font-family: 'Courier New'"><a href="http://myserver/MyService/Service.asmx%3c/wsa:To"><span style="color: windowtext">http://MyServer/MyService/Service.asmx&lt;/wsa:To</span></a>&gt;</span></p>
<p style="margin: 0in 0in 0pt">WSE is actually being smart about the header and rejects messages where the destination in the &lt;wsa:To&gt; header and the URL in the HTTP header do not match.</p>
<p style="margin: 0in 0in 0pt">One unfortunate consequence of this behavior is that you cannot use transparent tracing tools like <a href="http://www.pocketsoap.com/tcptrace/">tcpTrace</a> and <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c943c0dd-ceec-4088-9753-86f052ec8450&amp;displaylang=en">MSSoapT</a> for message debugging. These tools act like an intermediary receiver and they do cause the URLs in the &lt;To&gt; header and in the HTTP header to not match.</p>
&#8221;，大概意思也就是MSSoapt(Soap Toolkit&nbsp;)不支持WSE中WS-Addressing&lt;wsa:To&gt;。所以在调试WSE提供的特性时，不能再用&nbsp;<a href="http://www.pocketsoap.com/tcptrace/">tcpTrace</a>或者<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c943c0dd-ceec-4088-9753-86f052ec8450&amp;displaylang=en">MSSoapT</a>这样的工具来追踪Soap消息。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不过，好的消息是，WSE从2.0开始就提供了可以追踪到SOAP消息的诊断工具。<br />
<img height="553" alt="" src="http://www.blogjava.net/images/blogjava_net/zqli/16464/o_Diagnostics-WSE.jpg" width="513" border="0" /><br />
<br />
勾选Enable Message Trace，在调试过程中，将生成InputTrace.webinfo和OutputTrace.webinfo文件，里面记录了我们想要的信息，到此，不需要借助其他Trace工具便可追踪到Soap消息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<img src ="http://www.blogjava.net/zqli/aggbug/174521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-01-11 10:17 <a href="http://www.blogjava.net/zqli/archive/2008/01/11/174521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Soap Toolkit 3.0 Trace Utility跟踪SOAP消息</title><link>http://www.blogjava.net/zqli/archive/2008/01/08/173553.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 08 Jan 2008 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/01/08/173553.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/173553.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/01/08/173553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/173553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/173553.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Local &nbsp; port:8080 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination &nbsp; host:localhost <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination &nbsp; port:80&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #cce8cf">Soap Toolkit</font>是客户端和服务器中的一座桥，local &nbsp; port是Soap &nbsp; Toolkit的监听端口（所以80端口一般不能使用，除非特殊设定），凡是经过local &nbsp; port的请求都会被截下来，然后由Soap &nbsp; Toolkit转发到Destination &nbsp; host：Destination &nbsp; port去。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以，Web Services Client要将端口指定到Trace &nbsp; Utility的local &nbsp; port(任意设定一个端口)，Trace &nbsp; Utility的Destination &nbsp; port指定到WebService的端口。这样，就可以截获Soap消息了。 
<img src ="http://www.blogjava.net/zqli/aggbug/173553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-01-08 10:32 <a href="http://www.blogjava.net/zqli/archive/2008/01/08/173553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】WS-Addressing 从理论到实践 --- SOA基础规范介绍</title><link>http://www.blogjava.net/zqli/archive/2007/12/27/170969.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 27 Dec 2007 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/12/27/170969.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/170969.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/12/27/170969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/170969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/170969.html</trackback:ping><description><![CDATA[<div class="postbody">
<p><span>为了让</span><span>SOA</span><span>的应用能够更加的成熟，一些标准化组织</span><span>(</span><span>主要有</span><span>W<st1:chmetcnv unitname="C" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">3C</st1:chmetcnv></span><span>，</span><span>OASIS)</span><span>对</span><span>Web Services</span><span>的功能进行了扩展，为此制定了一系列的</span><span>WS-*</span><span>规范。通过这些规范，使得</span><span>Web Services</span><span>在实际应用中的能力得到了很大的增强，这些能力主要体现在对服务质量的保障上，例如安全，可靠性，事务等等。其中，</span><span>WS-Addressing</span><span>规范作为一个基础，为其余的规范提供了重要的支持功能，因此有必要在了解其他规范前，首先深入了解</span><span>WS-Addressing</span><span>规范。本文将从概念上介绍该规范，并希望通过WSE3.0的实例来看看该规范是如何被实践的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong style="color: #0000ff;">理论篇<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://idior.cnblogs.com/archive/2006/06/20/431013.html" target="_blank">WS-Addressing 问题的引出<br />
</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://idior.cnblogs.com/archive/2006/06/24/434586.html" target="_blank">WS-Addressing EndpointReference<br />
</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://idior.cnblogs.com/articles/434750.html" target="_blank">WS-Addressing Message Addressing Properties</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;"><strong>实践篇</strong><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://idior.cnblogs.com/articles/436801.html" target="_blank">Applied WSE 3.0 to Web Service Project&nbsp;</a>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://idior.cnblogs.com/articles/437646.html" target="_blank">Use Web Service Thought Message --- SoapClient</a> <br />
<br />
鉴于SOA的概念并没有为大家所广泛理解，在适当的时候有必要写一个<span style="color: #333399;">SOA乱弹。</span><br />
不过先请你记住以下几句话：<br />
<br />
<strong><em>SOA is an&nbsp;<span style="color: red;">integration</span> solution.<br />
SOA is<span style="color: red;"> message oriented</span> first.<br />
The Key character of SOA is <span style="color: red;">loosely coupled</span>.<br />
<span>SOA is enriched</span></em></strong><span><strong><em> by creating <span style="color: red;">composite</span> apps.<br />
<br />
</em></strong>相关资源：<br />
<a href="http://idior.cnblogs.com/archive/2004/12/13/76600.aspx" target="_blank">Web Services的设计与模式</a><br />
<a href="http://idior.cnblogs.com/archive/2006/05/16/354066.html" target="_blank">Web Services Security系列</a><br />
<br />
参考资料：<a href="http://www.w3.org/2002/ws/addr/" target="_blank">WS-Addressing Specification</a></span></span></p>
</div>
<img src ="http://www.blogjava.net/zqli/aggbug/170969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-12-27 18:37 <a href="http://www.blogjava.net/zqli/archive/2007/12/27/170969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]WSDL(Web服务描述语言)详细解析</title><link>http://www.blogjava.net/zqli/archive/2007/12/27/170967.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 27 Dec 2007 10:34:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/12/27/170967.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/170967.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/12/27/170967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/170967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/170967.html</trackback:ping><description><![CDATA[WSDL (Web Services Description Language,Web服务描述语言)是一种XML
Application，他将Web服务描述定义为一组服务访问点，客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似
远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述，然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服
务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。&nbsp;本文将详细讲解WSDL文档的结构，并分析每个元素的作用。
<p>一：WSDL定义</p>
<p>&nbsp;&nbsp;&nbsp; WSDL是一个用于精确描述Web服务的文档，WSDL文档是一个遵循WSDL XML模式的XML文档。WSDL
文档将Web服务定义为服务访问点或端口的集合。在 WSDL
中，由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来，因此可以对抽象定义进行再次使用：消息，指对交换数据的抽象描述；而端
口类型，指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联，可以定义一
个端口，而端口的集合则定义为服务。</p>
<p>&nbsp;&nbsp;
一个WSDL文档通常包含7个重要的元素，即types、import、message、portType、operation、binding、
service元素。这些元素嵌套在definitions元素中，definitions是WSDL文档的根元素。文章的下一部分将会详细介绍WSDL
的基本结构。</p>
<p>二：WSDL的基本结构--概述</p>
<p>如第一部分最后描述的那样，一个基本的WSDL文档包含7个重要的元素。下面将分别介绍这几个元素以及他们的作用。</p>
<p>WSDL 文档在Web服务的定义中使用下列元素：</p>
<ul>
    <li><strong>Types</strong> - 数据类型定义的容器，它使用某种类型系统(一般地使用XML Schema中的类型系统)。 </li>
    <li><strong>Message</strong> - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 </li>
    <li><strong>Operation</strong> - 对服务中所支持的操作的抽象描述，一般单个Operation描述了一个访问入口的请求/响应消息对。 </li>
    <li><strong>PortType</strong> - 对于某个访问入口点类型所支持的操作的抽象集合，这些操作可以由一个或多个服务访问点来支持。 </li>
    <li><strong>Binding</strong> - 特定端口类型的具体协议和数据格式规范的绑定。 </li>
    <li><strong>Port</strong> - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。 </li>
    <li><strong>Service</strong>- 相关服务访问点的集合。 </li>
</ul>
<p>&nbsp; 可以参考下图来理解一下WSDL的文档结构图：<img alt="WSDL文档元素的结构图" src="http://p.blog.csdn.net/images/p_blog_csdn_net/juxtapose/wsdl-01.gif" /></p>
<p>WSDL的xml schema可以参照如下网址：<a href="http://schemas.xmlsoap.org/wsdl/" target="_blank">http://schemas.xmlsoap.org/wsdl/</a></p>
<p>三：WSDL的基本结构--详述</p>
<p>本节将通过一个例子详细描述WSDL文档每个元素的作用。下面一个例子是一个简单的WSDL文档的内容，该文档的产生可以参见我的另外一篇文章：<a target="_blank" href="http://blog.csdn.net/juxtapose/archive/2007/09/10/1779849.aspx">xfire开发实例--HelloWorld篇</a>&nbsp;。</p>
<p>一个简单的Web Service的WSDL文档，该服务支持名为sayHello的唯一操作，该操作通过在http上运行<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P协议来实现的。该请求接受一个字符串name，经过处理后返回一个简单的字符串。文档如下：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:definitions<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tns</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdlsoap</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/soap/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/soap/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-envelope%22" target="_blank">http://www.w3.org/2003/05/soap-envelope"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/encoding/%22" target="_blank">http://schemas.xmlsoap.org/soap/encoding/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-encoding%22" target="_blank">http://www.w3.org/2003/05/soap-encoding"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/envelope/%22" target="_blank">http://schemas.xmlsoap.org/soap/envelope/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdl</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:schema&nbsp;</span><span style="color: #ff0000;">xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributeFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;">&nbsp;elementFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff;">="name"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff;">="out"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:schema</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHello"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:portType&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloRequest"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:portType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:binding&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpBinding"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff;">="tns:HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:binding&nbsp;</span><span style="color: #ff0000;">style</span><span style="color: #0000ff;">="document"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/http%22" target="_blank">http://schemas.xmlsoap.org/soap/http"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:operation&nbsp;</span><span style="color: #ff0000;">soapAction</span><span style="color: #0000ff;">=""</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:input</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:output</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:binding</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:service&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloService"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:port&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpPort"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binding</span><span style="color: #0000ff;">="tns:HelloServiceHttpBinding"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:address<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">location</span><span style="color: #0000ff;">="<a href="http://localhost:8080/xfire/services/HelloService%22" target="_blank">http://localhost:8080/xfire/services/HelloService"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:port</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:service</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:definitions</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>&#9830; types元素使用XML模式语言声明在WSDL文档中的其他位置使用的复杂数据类型与元素；</p>
<p>&#9830; import元素类似于XML模式文档中的import元素，用于从其他WSDL文档中导入WSDL定义；</p>
<p>&#9830; message元素使用在WSDL文档的type元素中定义或在import元素引用的外部WSDL文档中定义的XML模式的内置类型、复杂类型或元素描述了消息的有效负载；</p>
<p>&#9830;&nbsp;portType元素和operation元素描述了Web服务的接口并定义了他的方法。portType元素和operation元素类似于
java接口和接口中定义的方法声明。operation元素使用一个或者多个message类型来定义他的输入和输出的有效负载；</p>
<p>&#9830; Binding元素将portType元素和operation元素赋给一个特殊的协议和编码样式；</p>
<p>&#9830; service元素负责将Internet地址赋给一个具体的绑定；</p>
<p>1、definitions元素</p>
<p>所有的WSDL文档的根元素均是definitions元素。该元素封装了整个文档，同时通过其name提供了一个WSDL文档。除了提供一个命名空间外，该元素没有其他作用，故不作详细描述。</p>
<p>下面的代码是一个definitions元素的结构：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:definitions<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tns</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdlsoap</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/soap/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/soap/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-envelope%22" target="_blank">http://www.w3.org/2003/05/soap-envelope"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/encoding/%22" target="_blank">http://schemas.xmlsoap.org/soap/encoding/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-encoding%22" target="_blank">http://www.w3.org/2003/05/soap-encoding"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/envelope/%22" target="_blank">http://schemas.xmlsoap.org/soap/envelope/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdl</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:definitions</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>2、types元素</p>
<p>&nbsp;WSDL采用了W3C
XML模式内置类型作为其基本类型系统。types元素用作一个容器，用于定义XML模式内置类型中没有描述的各种数据类型。当声明消息部分的有效负载
时，消息定义使用了在types元素中定义的数据类型和元素。在本文的WSDL文档中的types定义：</p>
<p>&nbsp;</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:schema&nbsp;</span><span style="color: #ff0000;">xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributeFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;">&nbsp;elementFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff;">="name"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff;">="out"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:schema</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>上面是数据定义部分，该部分定义了两个元素，一个是sayHello，一个是sayHelloResponse：</p>
<p>sayHello：定义了一个复杂类型，仅仅包含一个简单的字符串，将来用来描述操作的参入传入部分；</p>
<p>sayHelloResponse：定义了一个复杂类型，仅仅包含一个简单的字符串，将来用来描述操作的返回值；</p>
<p>3、import元素</p>
<p>import元素使得可以在当前的WSDL文档中使用其他WSDL文档中指定的命名空间中的定义元素。本例子中没有使用import元素。通常在用户希望模块化WSDL文档的时候，该功能是非常有效果的。</p>
<p>import的格式如下：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:import&nbsp;</span><span style="color: #ff0000;">namespace</span><span style="color: #0000ff;">="<a href="http://xxx.xxx.xxx/xxx/xxx%22" target="_blank">http://xxx.xxx.xxx/xxx/xxx"</a></span><span style="color: #ff0000;">&nbsp;location</span><span style="color: #0000ff;">="<a href="http://xxx.xxx.xxx/xxx/xxx.wsdl%22" target="_blank">http://xxx.xxx.xxx/xxx/xxx.wsdl"</a></span><span style="color: #0000ff;">/&gt;</span></div>
</div>
<p>必须有namespace属性和location属性：</p>
<p>namespace属性：值必须与正导入的WSDL文档中声明的targetNamespace相匹配；</p>
<p>location属性：必须指向一个实际的WSDL文档，并且该文档不能为空。</p>
<p>4、message元素</p>
<p>message元素描述了Web服务使用消息的有效负载。message元素可以描述输出或者接受消息的有效负载；还可以描述<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P文件头和错误detail元素的内容。定义message元素的方式取决于使用RPC样式还是文档样式的消息传递。在本文中的message元素的定义，本文档使用了采用文档样式的消息传递：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHello"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>该部分是消息格式的抽象定义：定义了两个消息sayHelloResponse和sayHelloRequest：</p>
<p>sayHelloRequest：sayHello操作的请求消息格式，由一个消息片断组成，名字为parameters,元素是我们前面定义的types中的元素；</p>
<p>sayHelloResponse：sayHello操作的响应消息格式，由一个消息片断组成，名字为parameters,元素是我们前面定义的types中的元素；</p>
<p>&nbsp;如果采用RPC样式的消息传递，只需要将文档中的element元素应以修改为type即可。</p>
<p>5、portType元素</p>
<p>portType元素定义了Web服务的抽象接口。该接口有点类似Java的接口，都是定义了一个抽象类型和方法，没有定义实现。在WSDL中，
portType元素是由binding和service元素来实现的，这两个元素用来说明Web服务实现使用的Internet协议、编码方案以及
Internet地址。</p>
<p>一个portType中可以定义多个operation，一个operation可以看作是一个方法，本文中WSDL文档的定义：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:portType&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #ff0000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloRequest"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #ff0000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:portType</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>portType定义了服务的调用模式的类型，这里包含一个操作sayHello方法，同时包含input和output表明该操作是一个请求／响
应模式，请求消息是前面定义的sayHelloRequest，响应消息是前面定义的sayHelloResponse。input表示传递到Web服务
的有效负载，output消息表示传递给客户的有效负载。</p>
<p>６、binding</p>
<p>binding元素将一个抽象portType映射到一组具体协议(<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>O和HTTP)、消息传递样式、编码样式。通常binding元素与协议专有的元素和在一起使用，本文中的例子：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:binding&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpBinding"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff;">="tns:HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:binding&nbsp;</span><span style="color: #ff0000;">style</span><span style="color: #0000ff;">="document"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/http%22" target="_blank">http://schemas.xmlsoap.org/soap/http"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:operation&nbsp;</span><span style="color: #ff0000;">soapAction</span><span style="color: #0000ff;">=""</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:input</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:output</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:binding</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>这部分将服务访问点的抽象定义与<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P HTTP绑定，描述如何通过<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P/HTTP来访问按照前面描述的访问入口点类型部署的访问入口。其中规定了在具体<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P调用时，应当使用的soapAction是""。</p>
<p>具体的使用需要参考特定协议定义的元素。</p>
<p>７、service元素和port元素</p>
<p>service元素包含一个或者多个port元素，其中每个port元素表示一个不同的Web服务。port元素将URL赋给一个特定的binding，甚至可以使两个或者多个port元素将不同的URL赋值给相同的binding。文档中的例子：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:service&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloService"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:port&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpPort"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binding</span><span style="color: #0000ff;">="tns:HelloServiceHttpBinding"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:address<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">location</span><span style="color: #0000ff;">="<a href="http://localhost:8080/xfire/services/HelloService%22" target="_blank">http://localhost:8080/xfire/services/HelloService"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:port</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:service</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>这部分是具体的Web服务的定义，在这个名为HelloService的Web服务中，提供了一个服务访问入口，访问地址是<a href="http://localhost:8080/xfire/services/HelloService" target="_blank">http://localhost:8080/xfire/services/HelloService</a>，使用的消息模式是由前面的binding所定义的。</p>
<p>　　本文简单介绍了WSDL规范的用途，基本结构和使用方法，希望对大家学习WSDL有帮助。</p>
<img src ="http://www.blogjava.net/zqli/aggbug/170967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-12-27 18:34 <a href="http://www.blogjava.net/zqli/archive/2007/12/27/170967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>