<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>荷包蛋博客 &#187; soap</title>
	<atom:link href="http://www.hebaodans.com/tag/soap/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hebaodans.com</link>
	<description>好的心态是成功的开始</description>
	<lastBuildDate>Tue, 20 Jul 2010 17:32:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHP调用Webservice实例</title>
		<link>http://www.hebaodans.com/2008/09/php-webservice-soap-nusoap/</link>
		<comments>http://www.hebaodans.com/2008/09/php-webservice-soap-nusoap/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 08:55:02 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[nusoap]]></category>
		<category><![CDATA[php webservice]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservice实例]]></category>
		<category><![CDATA[调用webservice]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=108</guid>
		<description><![CDATA[NuSoap是PHP环境下的WebService编程工具，用于创建或调用WebService。它是一个开源软件，是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类，由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )开发。NuSOAP的一个优势是不需要扩展库的支持，这种特性使得NuSoap可以用于所有的PHP环境，不受服务器安全设置的影响。　　 方法一：直接调用 &#60;? /******************************************************************************/ /*  文件名 : soapclient.php /*  说  明 : WebService接口客户端例程 /******************************************************************************/ include(&#8216;NuSoap.php&#8217;); // 创建一个soapclient对象，参数是server的WSDL $client = new soapclient(&#8216;http://localhost/Webservices/Service.asmx?WSDL&#8217;, &#8216;wsdl&#8217;); // 参数转为数组形式传递 $aryPara = array(&#8216;strUsername&#8217;=&#62;&#8217;username&#8217;, &#8216;strPassword&#8217;=&#62;MD5(&#8216;password&#8217;)); // 调用远程函数 $aryResult = $client-&#62;call(&#8216;login&#8217;,$aryPara); //echo $client-&#62;debug_str; /* if (!$err=$client-&#62;getError()) {   print_r($aryResult); } else {   print &#8220;ERROR: $err&#8221;; } */ $document=$client-&#62;document; echo &#60;&#60;&#60;SoapDocument &#60;?xml [...]]]></description>
			<content:encoded><![CDATA[<p>NuSoap是PHP环境下的WebService编程工具，用于创建或调用WebService。它是一个开源软件，是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类，由NuSphere Corporation(<a href="http://dietrich.ganx4.com/nusoap/">http://dietrich.ganx4.com/nusoap/</a> )开发。NuSOAP的一个优势是不需要扩展库的支持，这种特性使得NuSoap可以用于所有的PHP环境，不受服务器安全设置的影响。　　</p>
<p><strong>方法一：直接调用</strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>&lt;?<br />
/******************************************************************************/<br />
/*  文件名 : soapclient.php<br />
/*  说  明 : WebService接口客户端例程<br />
/******************************************************************************/<br />
include(&#8216;NuSoap.php&#8217;);</p>
<p>// 创建一个soapclient对象，参数是server的WSDL<br />
$client = new soapclient(&#8216;http://localhost/Webservices/Service.asmx?WSDL&#8217;, &#8216;wsdl&#8217;);</p>
<p>// 参数转为数组形式传递<br />
$aryPara = array(&#8216;strUsername&#8217;=&gt;&#8217;username&#8217;, &#8216;strPassword&#8217;=&gt;MD5(&#8216;password&#8217;));</p>
<p>// 调用远程函数<br />
$aryResult = $client-&gt;call(&#8216;login&#8217;,$aryPara);</p>
<p>//echo $client-&gt;debug_str;<br />
/*<br />
if (!$err=$client-&gt;getError()) {<br />
  print_r($aryResult);<br />
} else {<br />
  print &#8220;ERROR: $err&#8221;;<br />
}<br />
*/</p>
<p>$document=$client-&gt;document;<br />
echo &lt;&lt;&lt;SoapDocument<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;GB2312&#8243;?&gt;<br />
 &lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:SOAP-ENV=&#8221;<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>&#8221; xmlns:xsd=&#8221;<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>&#8221; xmlns:xsi=&#8221;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>&#8221; xmlns:SOAP-ENC=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:si=&#8221;<a href="http://soapinterop.org/xsd">http://soapinterop.org/xsd</a>&#8220;&gt;<br />
   &lt;SOAP-ENV:Body&gt;<br />
   $document<br />
   &lt;/SOAP-ENV:Body&gt;<br />
 &lt;/SOAP-ENV:Envelope&gt;<br />
SoapDocument;</p>
<p>?&gt;</p>
</div>
<p><strong><br />
方法二：代理方式调用</strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>&lt;?<br />
/******************************************************************************/<br />
/*  文件名 : soapclient.php<br />
/*  说  明 : WebService接口客户端例程<br />
/******************************************************************************/<br />
require(&#8216;NuSoap.php&#8217;);</p>
<p>//创建一个soapclient对象，参数是server的WSDL<br />
$client=new soapclient(&#8216;http://localhost/Webservices/Service.asmx?WSDL&#8217;, &#8216;wsdl&#8217;);</p>
<p>//生成proxy类<br />
$proxy=$client-&gt;getProxy();</p>
<p>//调用远程函数<br />
$aryResult=$proxy-&gt;login(&#8216;username&#8217;,MD5(&#8216;password&#8217;));</p>
<p>//echo $client-&gt;debug_str;<br />
/*<br />
if (!$err=$proxy-&gt;getError()) {<br />
  print_r($aryResult);<br />
} else {<br />
  print &#8220;ERROR: $err&#8221;;<br />
}<br />
*/</p>
<p>$document=$proxy-&gt;document;<br />
echo &lt;&lt;&lt;SoapDocument<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;GB2312&#8243;?&gt;<br />
 &lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:SOAP-ENV=&#8221;<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>&#8221; xmlns:xsd=&#8221;<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>&#8221; xmlns:xsi=&#8221;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>&#8221; xmlns:SOAP-ENC=&#8221;<a href="http://schemas.xmlsoap.org/soap/encoding/">http://schemas.xmlsoap.org/soap/encoding/</a>&#8221; xmlns:si=&#8221;<a href="http://soapinterop.org/xsd">http://soapinterop.org/xsd</a>&#8220;&gt;<br />
   &lt;SOAP-ENV:Body&gt;<br />
   $document<br />
   &lt;/SOAP-ENV:Body&gt;<br />
 &lt;/SOAP-ENV:Envelope&gt;<br />
SoapDocument;</p>
<p>?&gt;</p>
</div>
<p>　　许多使用NuSoap 调用.NET WebService或J2EE  WebService的朋友可能都遇到过中文乱码问题，下面介绍这一问题的出现的原因和相应的解决方法。</p>
<p>　　<strong>NuSoap调用WebService出现乱码的原因：</strong></p>
<p>　　通常我们进行WebService开发时都是用的UTF-8编码，这时我们需要设置：</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>$client-&gt;soap_defencoding = &#8216;utf-8&#8242;;</p>
</div>
<p>　　同时，需要让xml以同样的编码方式传递：</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>$client-&gt;xml_encoding = &#8216;utf-8&#8242;;</p>
</div>
<p> 　　至此应该是一切正常了才对，但是我们在输出结果的时候，却发现返回的是乱码。</p>
<p>　　<strong>NuSoap调用WebService出现乱码的解决方法：</strong></p>
<p>　　实际上，开启了调试功能的朋友，相信会发现$client-&gt;response返回的是正确的结果，为什么$result = $client-&gt;call($action, array(&#8216;parameters&#8217; =&gt; $param)); 却是乱码呢？</p>
<p>　　研究过NuSoap代码后我们会发现，当xml_encoding设置为UTF-8时，NuSoap会检测decode_utf8的设置，如果为true，会执行 PHP 里面的utf8_decode函数，而NuSoap默认为true，因此，我们需要设置：</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;">
<p>$client-&gt;soap_defencoding = &#8216;utf-8&#8242;;<br />
$client-&gt;decode_utf8 = false;<br />
$client-&gt;xml_encoding = &#8216;utf-8&#8242;;</p>
</div>
<p>补充介绍</p>
<p><span style="font-size: x-small;">NuSOAP 是 PHP 环境下的 WEB 服务编程工具，用于创建或调用 WEB 服务。它是一个开源软件，当前版本是 0.7.2 ，支持 SOAP1.1 、 WSDL1.1 ，可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写，由一系列 PHP 类组成，不需要扩展库的支持，这种特性使得 NuSOAP 可以用于所有的 PHP 环境，不受服务器安全设置的影响。<br />
 <br />
1. NuSOAP 的获取和安装<br />
NuSOAP 项目建立在 SourceForge 上，网络地址是： </span><a href="http://sourceforge.net/projects/nusoap/"><span style="font-size: x-small;">http://sourceforge.net/projects/<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/nusoap/" title="View all posts in nusoap" target="_blank">nusoap</a></span>/</span></a><span style="font-size: x-small;"> ，这里，可以下载到 NuSOAP 的最新的版本。 </span></p>
<h1>
<h2><span style="font-size: x-small;">NuSOAP 的安装比较简单，把下载的 NuSOAP 的文件拷贝到服务器上，可以放在独立的目录里，也可以与程序代码放在相同的目录里，只要你的 PHP 代码能够访问到这些文件就可以了。 </span></h2>
<h2><span style="font-size: x-small;">本文的测试环境基于 PHP4.3.2 和 NuSOAP 0.7.2 版本， NuSOAP 安装在 WEB 目录“ /<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/nusoap/" title="View all posts in nusoap" target="_blank">nusoap</a></span> ”里，有两个子目录， lib 和 samples 。其中， lib 目录下存放 NuSOAP 的所有源代码文件， samples 目录下是NuSOAP开发小组提供一些的例子。测试文件存放在 WEB 目录“ /nusoap ”里。 </span></h2>
<h2><span style="font-size: x-small;"> <br />
2. NuSOAP 的使用<br />
NuSOAP 由一 PHP 的类组成，其中最常用到的是类soap_server和类soalclient。类soap_server 用于创建 WEB 服务，类soapclient在访问WEB服务时会用到。 </span></h2>
<h2><span style="font-size: x-small;">2.1 一个简单的例子： Hello World<br />
这个例子将利用 NuSOAP 创建一个简单的 WEB 服务，并利用 NuSOAP 创建一个客户端程序，调用这个服务。这个服务唯一的功能就是向客户端返回一个字符串“ Hello World ”。首先，创建 WEB 服务程序代码文件“ /nusoap/nusoap_server1.php ”： </span></h2>
<h2><span style="font-size: x-small;">//把 NuSOAP 的源文件包含到当前的代码文件里<br />
&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;); </span></h2>
<h2><span style="font-size: x-small;">//定义服务程序<br />
function hello() {<br />
  return &#8216;Hello World!&#8217;;<br />
} </span></h2>
<h2><span style="font-size: x-small;">//初始化服务对象 , 这个对象是类 soap_server 的一个实例<br />
$<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/soap/" title="View all posts in soap" target="_blank">soap</a></span> = new soap_server; //调用服务对象的 register 方法注册需要被客户端访问的程序。<br />
//只有注册过的程序，才能被远程客户端访问到。<br />
$<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/soap/" title="View all posts in soap" target="_blank">soap</a></span>-&gt;register(&#8216;hello&#8217;); //最后一步，把客户端通过 post 方式提交的数据，传递给服务对象的 service 方法。<br />
//service 方法处理输入的数据，调用相应的函数或方法，并且生成正确的反馈，传回给客户端。<br />
$<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/soap/" title="View all posts in soap" target="_blank">soap</a></span>-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 至此， WEB 服务程序代码文件已经建好，接下来，创建一个客户端程序代码文件“ /nusoap/nusoap_client1.php ”，调用 WEB 服务： </span></h2>
<h2><span style="font-size: x-small;">//把 NuSOAP 的源文件包含到当前的代码文件里<br />
&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">//初始化客户端对象，这个对象是类 soapclient 的一个实例，<br />
//把服务程序的 URL 地址传递给soapclient类的构造函数。<br />
$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server1.php&#8217;); //利用客户端对象的 call 方法调用 WEB 服务的程序<br />
$str=$client-&gt;call(&#8216;hello&#8217;); //客户端对象的 getError() 方法可以用来检查调用过程是否出现错误。<br />
//如果没有错误， getError() 方法返回 false ；如果有错误， getError()方法返回错误信息。<br />
if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,htmlentities($str,ENT_QUOTES);<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,htmlentities($err,ENT_QUOTES);<br />
}<br />
?&gt; 至此，客户端程序也建立好了，打开浏览器，访问客户端程序，看一下结果。这个例子，浏览器会显示字符串：“程序返回 :Hello World! ” </span></h2>
<h2><span style="font-size: x-small;">2.2 传递参数和返回错误信息的方法<br />
再通过例子说明传递参数和返回错误信息的方法。这个例子实现两个字符串的连接，参数是两个字符串，返回值是由两个参数连接而成的字符串。首先，创建服务程序代码文件“ /nusoap/nusoap_server2.php ”，完整的代码如下： </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;); </span></h2>
<h2><span style="font-size: x-small;">function concatenate($str1,$str2) {<br />
    if (is_string($str1) &amp;&amp; is_string($str2))<br />
        return $str1 . $str2;<br />
    else<br />
        return new soap_fault(&#8216; 客户端 &#8216;,&#8221;,&#8217;concatenate 函数的参数应该是两个字符串 &#8216;);<br />
}<br />
$soap = new soap_server;<br />
$soap-&gt;register(&#8216;concatenate&#8217;);<br />
$soap-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 与 2.1 节 WEB 服务程序的代码比较，这里的代码结构大体是相同的。注意以下两点：</span></h2>
<h2><span style="font-size: x-small;">服务程序的定义不同，带有两个参数。 NuSOAP 注册服务程序的过程还是一样的，都是调用服务对象的 register 方法。<br />
这里使用了 NuSOAP 的一个新类 soap_fault 。当传入的两个参数有一个不是字符串时，程序通过这个类把错误信息返回给客户端。这个类的构造函数有 4 个参数：<br />
fault</span></h2>
<h2><span style="font-size: x-small;">code<br />
 必填参数 , 建议值为“ Client ”或“ Server ”，指明错误是客户端的错误还是服务端的错误。<br />
 <br />
faultactor<br />
 预留项，现在还没有使用<br />
 <br />
faultstring<br />
 错误的描述信息<br />
 <br />
faultdetail<br />
 可选项， XML 格式的数据 , 说明详细的错误信息 <br />
 </span></h2>
<h2><span style="font-size: x-small;">客户端程序代码文件“ /nusoap/nusoap_client2.php ”的完整内容如下 : </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server2.php&#8217;);<br />
$parameters=array(&#8216; 字符串 1&#8242;,&#8217; 字符串 2&#8242;);<br />
$str=$client-&gt;call(&#8216;concatenate&#8217;,$parameters);</span></h2>
<h2><span style="font-size: x-small;">if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}<br />
?&gt; NuSOAP 的客户端调用带参数的 WEB 服务时，使用数组传递参数。 $parameters 是一个数组，其中依次是每个参数的值。客户端在调用远程的服务程序时，使用带有两个参数的 call 方法，第一个参数是服务程序的名称，第二个参数是服务程序的参数数组，这里是 $parameters 。通过浏览器访问上面的客户端程序，浏览器上会显示字符串：“ 程序返回 : 字符串 1 字符串 2 ” </span></h2>
<h2><span style="font-size: x-small;">接下来，试着给 WEB 服务程序传入错误参数，修改上面的客户端程序，把生成参数数组的语句改成： $parameters=array(“ 字符串 ”,12) ，再通过浏览器访问客户端程序，浏览器上会显示字符串：“错误 : 客户端 : concatenate 函数的参数应该是两个字符串”。 WEB 服务程序判断传入的参数有一个不是字符串，通过 soap_fault 给客户端返回错误信息。 </span></h2>
<h2><span style="font-size: x-small;">2.3 调试的方法<br />
NuSOAP中常用的调试方法有三种:</span></h2>
<h2><span style="font-size: x-small;">2.3.1 soapclient 类的 request 和 response 成员变量<br />
最直接的调试方法就是检查访问 WEB 服务的过程中，客户端发出的 request 信息和服务端返回的 response 信息。 soapclient 类的 request 和 response 成员变量包含这些信息，在程序中显示出这两个变量的内容，可以帮助分析程序运行的情况。看下面的代码:</span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server2.php&#8217;);<br />
$parameters=array(&#8216; 字符串 1&#8242;,&#8217; 字符串 2&#8242;);<br />
$str=$client-&gt;call(&#8216;concatenate&#8217;,$parameters);</span></h2>
<h2><span style="font-size: x-small;">if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}</span></h2>
<h2><span style="font-size: x-small;">//下面显示request和response 变量的内容<br />
echo &#8216;&lt;p/&gt;&#8217;;<br />
echo &#8216;Request:&#8217;;<br />
echo &#8216;&lt;pre&gt;&#8217;,htmlspecialchars($client-&gt;request,ENT_QUOTES),&#8217;&lt;/pre&gt;&#8217;;<br />
echo &#8216;Response:&#8217;;<br />
echo &#8216;&lt;pre&gt;&#8217;,htmlspecialchars($client-&gt;response,ENT_QUOTES ),&#8217;&lt;/pre&gt;&#8217;;<br />
?&gt;<br />
2.3.2 soapclient 类的 debug_str 成员变量<br />
soapclient 类的 debug_str 成员变量提供了更为详细的调试信息，查看这个变量的内容，可以更好地帮助程序调试。 </span></h2>
<h2><span style="font-size: x-small;">2.3.3 WEB 服务程序提供的调试方法<br />
WEB 服务程序代码中，在创建 soap_server 类的实例前，定义变量 $debug=1 。调试信息作为备注，放在 SOAP 消息的尾部返回客户端，客户端通过查看 WEB 服务的 response 信息来查看调试信息。</span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;); </span></h2>
<h2><span style="font-size: x-small;">function concatenate($str1,$str2) {<br />
    if (is_string($str1) &amp;&amp; is_string($str2))<br />
        return $str1 . $str2;<br />
    else<br />
        return new soap_fault(&#8216; 客户端 &#8216;,&#8221;,&#8217;concatenate 函数的参数应该是两个字符串 &#8216;);<br />
}</span></h2>
<h2><span style="font-size: x-small;">$debug=1; //定义调试<br />
$soap = new soap_server;<br />
$soap-&gt;register(&#8216;concatenate&#8217;);<br />
$soap-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 2.4 对 WSDL 的支持<br />
NuSOAP 内部通过类 &#8220;WSDL&#8221; 实现对 WSDL 的支持。对于 NuSOAP 的用户来说，不需要关心内部的WSDL类是如何工作的，正确地使用 soap_server 类和 soapclient 类就可以实现对 WSDL 的支持。 </span></h2>
<h2><span style="font-size: x-small;">2.4.1 创建支持 WSDL 的 WEB 服务<br />
为了实现 WEB 服务程序对 WSDL 的支持，需要使用 soap_server 的 configureWSDL 方法，并且在调用 soap_server 的 register 方法注册 WEB 服务程序时，需要提供更详细的参数。看下面的代码，代码的文件名是 “/nusoap/nusoap_server3.php”。 </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">function concatenate($str1,$str2) {<br />
    if (is_string($str1) &amp;&amp; is_string($str2))<br />
        return $str1 . $str2;<br />
    else<br />
        return new soap_fault(&#8216; 客户端 &#8216;,&#8221;,&#8217;concatenate 函数的参数应该是两个字符串 &#8216;);<br />
}</span></h2>
<h2><span style="font-size: x-small;">$soap = new soap_server;<br />
$soap-&gt;configureWSDL(&#8216;concatenate&#8217;); // 初始化对 WSDL 的支持</span></h2>
<h2><span style="font-size: x-small;">// 注册服务<br />
$soap-&gt;register(&#8216;concatenate&#8217;,<br />
array(&#8220;str1&#8243;=&gt;&#8221;xsd:string&#8221;,&#8221;str2&#8243;=&gt;&#8221;xsd:string&#8221;), // 输入参数的定义<br />
array(&#8220;return&#8221;=&gt;&#8221;xsd:string&#8221;) // 返回参数的定义<br />
);</span></h2>
<h2><span style="font-size: x-small;">$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : &#8221;;<br />
$soap-&gt;service($HTTP_RAW_POST_DATA);<br />
?&gt; 现在打开浏览器，访问刚才建立的文件，</span><a href="http://127.0.0.1/nusoap/nusoap_server3.php"><span style="font-size: x-small;">http://127.0.0.1/nusoap/nusoap_server3.php</span></a><span style="font-size: x-small;">，结果如下：</span></h2>
<h2><span style="font-size: x-small;">concatenate<br />
View the WSDL for the service. Click on an operation name to view it&#8217;s details.</span></h2>
<h2><span style="font-size: x-small;">concatenate<br />
点击函数名称concatenate，可以看到对函数的描述。点击&#8221;WSDL&#8221;，或者访问WEB服务文件，并在后面加上查询字符串&#8221;?wsdl&#8221;(</span><a href="http://127.0.0.1/nusoap/nusoap_server3.php?wsdl"><span style="font-size: x-small;">http://127.0.0.1/nusoap/nusoap_server3.php?wsdl</span></a><span style="font-size: x-small;">)，可以得到WEB服务的WSDL内容。</span></h2>
<h2><span style="font-size: x-small;">2.4.2 通过 WSDL 调用 WEB 服务<br />
通过 WSDL 调用 WEB 服务，与不通过 WSDL 调用 WEB 服务，程序的结构大体相同。区别在于，通过 WSDL 调用 WEB 服务，初始化 soapclient 类时，传入两个参数到 soapclient 的构造函数，第一个参数是 WSDL 文件的地址，第二个参数指定是否使用 WSDL ，指定为 true 即可。看下面的代码，代码的文件名是 “ /nusoap/nusoap_client3.php ” </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server3.php?wsdl&#8217;,true);<br />
$parameters=array(&#8216; 字符串 1&#8242;,&#8217; 字符串 2&#8242;);</span></h2>
<h2><span style="font-size: x-small;">$str=$client-&gt;call(&#8216;concatenate&#8217;,$parameters);<br />
if (!$err=$client-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}<br />
?&gt; 2.4.3 代理的使用<br />
NuSOAP 提供代理的方法调用远程 WEB 服务。这种方法，在客户端程序里面创建一个远程服务的代理对象，通过代理直接调用远程的 WEB 服务，而不需要通过 soalclient 类的 call 方法。看下面的代码。 </span></h2>
<h2><span style="font-size: x-small;">&lt;?php<br />
require_once(&#8220;lib/nusoap.php&#8221;);</span></h2>
<h2><span style="font-size: x-small;">$client = new soapclient(&#8216;http://127.0.0.1/nusoap/nusoap_server3.php?wsdl&#8217;,true);<br />
$proxy=$client -&gt; getProxy(); // 创建代理对象 (soap_proxy 类 )</span></h2>
<h2><span style="font-size: x-small;">$str=$proxy-&gt;concatenate(&#8221; 参数 1&#8243;,&#8221; 参数 2&#8243;); // 直接调用 WEB 服务<br />
if (!$err=$proxy-&gt;getError()) {<br />
    echo &#8221; 程序返回 :&#8221;,$str;<br />
} else {<br />
    echo &#8221; 错误 :&#8221;,$err;<br />
}<br />
?&gt;<br />
</span></h2>
<h2><span style="font-size: x-small;">3. 更多的学习资源 </span></h2>
<ul>
<li><a href="http://dietrich.ganx4.com/nusoap/"><span style="font-size: x-small; color: #006629;">http://dietrich.ganx4.com/nusoap/</span></a><span style="font-size: x-small;"> </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapprog.htm"><span style="font-size: x-small; color: #006629;">Programming with NuSOAP</span></a><span style="font-size: x-small;">. 24 Apr 2003 </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapprog2.htm"><span style="font-size: x-small; color: #006629;">Programming with NuSOAP Part 2</span></a><span style="font-size: x-small;">. 29 May 2003 </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapintro.htm"><span style="font-size: x-small; color: #006629;">Introduction to NuSOAP</span></a><span style="font-size: x-small;">. 03 Nov 2004 </span></li>
<li><span style="font-size: x-small;">Scott Nichol. </span><a href="http://www.scottnichol.com/nusoapprogwsdl.htm"><span style="font-size: x-small; color: #006629;">Programming with NuSOAP Using WSDL</span></a><span style="font-size: x-small;">. 11 Nov 2003 </span></li>
</ul>
</h1>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/09/php-webservice-soap-nusoap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>什么是Web Service</title>
		<link>http://www.hebaodans.com/2008/09/what-is-web-servic/</link>
		<comments>http://www.hebaodans.com/2008/09/what-is-web-servic/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 06:28:24 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[uddi]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xsd]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=104</guid>
		<description><![CDATA[    公司最近准备把网站中的客户资料导入恩特客户系统中。跟恩特的开发部沟通了一下，他们采用web services提供接口。之前没听过，顺道google一下，又认识了新东西。     你可能早就听说过Web Service了，你也可能已经对Web Service有了一些概念，现在不管是在什么场合，谈到以后发展的新趋势，大家都会提到Web Service。世界上的顶级公司，不管是微软、IBM还是SUN，都开始把Web Service频繁地挂在嘴边。大多数媒体也开始鼓吹Web Service是多么的好，多么的有前途或者“钱”途……但Web Service到底是什么呢？数据库通过网页实现服务？网络上的协议？还是一种软件的标准？ 　　在http//www.hexiesoft.net 上你可以欣赏到.NET下使用微软开发工具建立的Web Service企业级ERP应用系统。 　　在http//dwdemos.alphaworks.ibm.com/HospitalProj/index.html上，你可以体验使用IBM开发工具创建的提供医疗保险信息查询的Web Service。 　　Web Service概念 　　什么是Web Service呢？从表面上看，Web Service就是一个应用程序，它向外界暴露出一个能够通过Web进行调用的API。这就是说，你能够用编程的方法通过Web调用来实现某个功能的应用程序。例如，笔者创建一个Web Service，它的作用是查询某公司某员工的基本信息。它接受该员工的编号作为查询字符串，返回该员工的具体信息。你可以在浏览器的地址栏中直接输入HTTP GET请求来调用罗列该员工基本信息的ASP页面，这就可以算作是体验Web Service了。 　　从深层次上看，Web Service是一种新的Web应用程序分支，它们是自包含、自描述、模块化的应用，可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。 　　Web Service便是基于网络的、分布式的模块化组件，它执行特定的任务，遵守具体的技术规范，这些规范使得Web Service能与其他兼容的组件进行互操作。它可以使用标准的互联网协议，像超文本传输协议HTTP和XML，将功能体现在互联网和企业内部网上。Web Service平台是一套标准，它定义了应用程序如何在Web上实现互操作性。你可以用你喜欢的任何语言(笔者用的是C#)，在你喜欢的任何平台上写Web Service。 Web Service的技术支持 　　Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性，Web Service平台必须提供一套标准的类型系统，用于沟通不同平台、编程语言和组件模型中的不同类型系统。目前这些协议有： 　　1.XML和XSD 　　可扩展的标记语言XML?是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外，XML主要的优点在于它既与平台无关，又与厂商无关。XML是由万维网协会(W3C)创建，W3C制定的XML SchemaXSD?定义了一套标准的数据类型，并给出了一种语言来扩展这套数据类型。 　　Web Service平台是用XSD来作为数据类型系统的。当你用某种语言如VB.NET或C#?来构造一个Web Service时，为了符合Web Service标准，所有你使用的数据类型都必须被转换为XSD类型。如想让它使用在不同平台和不同软件的不同组织间传递，还需要用某种东西将它包装起来。这种东西就是一种协议，如 SOAP。 　　2.SOAP 　　SOAP即简单对象访问协议(Simple Object Access Protocol)，它是用于交换XML编码信息的轻量级协议。它有三个主要方面：XML-envelope为描述信息内容和如何处理内容定义了框架，将程序对象编码成为XML对象的规则，执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。例如，你可以使用 SMTP，即因特网电子邮件协议来传递SOAP消息，这可是很有诱惑力的。在传输层之间的头是不同的，但XML有效负载保持相同。 　　Web Service 希望实现不同的系统之间能够用“软件-软件对话”的方式相互调用，打破了软件应用、网站和各种设备之间的格格不入的状态，实现“基于Web无缝集成”的目标。 　　3.WSDL 　　Web Service描述语言WSDL?就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言，用于描述Web Service及其函数、参数和返回值。因为是基于XML的，所以WSDL既是机器可阅读的，又是人可阅读的。 　　4.UDDI 　　UDDI 的目的是为电子商务建立标准；UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范，同时也包含一组使企业能将自身提供的Web Service注册，以使别的企业能够发现的访问协议的实现标准。 　　5.远程过程调用RPC与消息传递 　　Web Service本身其实是在实现应用程序间的通信。我们现在有两种应用程序通信的方法：RPC远程过程调用?和消息传递。使用RPC的时候，客户端的概念是调用服务器上的远程过程，通常方式为实例化一个远程对象并调用其方法和属性。RPC系统试图达到一种位置上的透明性：服务器暴露出远程对象的接口，而客户端就好像在本地使用的这些对象的接口一样，这样就隐藏了底层的信息，客户端也就根本不需要知道对象是在哪台机器上。 　Web Service软件的支持 　　操作系统离不开丰富的应用软件的支持。同样，Web Service这项技术只有通过日益广泛的应用才能体现出其价值，目前比较流行的实现方法是使用.NET 和 Java两种技术，并且两种实现方法可以互相操作；如今我们已经可以看到使用微软、IBM、SUN、Borland等不同厂商的Web Service构建工具建立的Web Service应用。 　　微软.NET 　　微软的.NET技术应该算是时下最为流行的Web Service 开发技术。首先因为其公司在以前相应的产品就占有相当大的市场份额，以至使新推出的.NET得以有比较稳定的用户群；其次也是更重要的是 .NET平台不仅延续了微软一贯的编程风格，而且还增加了许多支持Web 服务的关键性技术，使得.NET在操作的简单性和执行的稳定性，高效性上达到了一个非常好的结合。 　　微软的Visual Studio.NET便是一个便于 Web 服务的开发工具。微软的目标是，将其新编程语言??C#作为Web Service的首选语言。虽然C#看起来与Java类似，但是还有一些Java中没有的独特的功能。.NET技术中用于Web Service 开发的主要工具是ASP.NET?从技术上说，ASPasp.net? 提供了一些超出ASP以前版本的优点(例如：代码和HTML的分离，与脚本语言相比较，对“真正”的编程语言如 C# 的支持)。 　　IBM的WebSphere 　　IBM公司是业界第一家能够提供全面支持Web服务的电子商务基础设施中间件的公司。通过多年来与W3C(The World Wide Web Consortium)的共同努力，包括DB2、Lotus、Tivoli 和WebSphere在内的所有IBM软件都实现了对SOAP、WSDL、UDDI、Linux、XML、J2EE等开放技术和标准的全面支持。　　IBM公司的WebSphere也是比较好的基础架构软件开发平台。WebSphere软件平台及开发工具包括WebSphere Studio Application Developer WSAD? 基于J2EE、XML 和Web服务等开放标准，并具备 IBM 在可靠性、扩展性和安全性上的主要优势。WebSphere 是 IBM 在 Web Services策略中的核心平台，它支持所有开发、发布、部署 Web Services应用所必需的开放标准和技术，包括 UDDI，SOAP，J2EE，WSDL，和对 XML 技术集成的增强，这特使得它在全球有很多用户。 　　Borland的JBuilder 　　Borland公司在 JBuilder7中，用户可以用其Borland Web Services Kit for Java和Borland JBuilder MobileSet 3进行更快捷地开发Web Service和无线应用。这样将使开发者能够在同一个开发环境中轻松地创建和集成Web Service。今年新推出的JBuidler8更是针对Web Service开发更提供了方便和高效的方法。 　　总之，在Web Service开发上，.NET 和Java都是很好的选择，尽管两者现在都有一些需要完善的地方，但是就目前来说，它们还是最好的开发手段和技术。具体选择哪种开发工具，也是仁者见仁，智者见智的问题。从根本上说，这两种方法没有孰优孰劣的问题，只是根据使用者对这两种方法的掌握程度和对具体语言的偏爱程度来决定。]]></description>
			<content:encoded><![CDATA[<p>    公司最近准备把网站中的客户资料导入恩特客户系统中。跟恩特的开发部沟通了一下，他们采用web services提供接口。之前没听过，顺道google一下，又认识了新东西。</p>
<p>    你可能早就听说过Web Service了，你也可能已经对Web Service有了一些概念，现在不管是在什么场合，谈到以后发展的新趋势，大家都会提到Web Service。世界上的顶级公司，不管是微软、IBM还是SUN，都开始把Web Service频繁地挂在嘴边。大多数媒体也开始鼓吹Web Service是多么的好，多么的有前途或者“钱”途……但Web Service到底是什么呢？数据库通过网页实现服务？网络上的协议？还是一种软件的标准？</p>
<p>　　在http//www.hexiesoft.net 上你可以欣赏到.NET下使用微软开发工具建立的Web Service企业级ERP应用系统。</p>
<p>　　在http//dwdemos.alphaworks.ibm.com/HospitalProj/index.html上，你可以体验使用IBM开发工具创建的提供医疗保险信息查询的Web Service。</p>
<p>　　Web Service概念</p>
<p>　　什么是Web Service呢？从表面上看，Web Service就是一个应用程序，它向外界暴露出一个能够通过Web进行调用的API。这就是说，你能够用编程的方法通过Web调用来实现某个功能的应用程序。例如，笔者创建一个Web Service，它的作用是查询某公司某员工的基本信息。它接受该员工的编号作为查询字符串，返回该员工的具体信息。你可以在浏览器的地址栏中直接输入HTTP GET请求来调用罗列该员工基本信息的ASP页面，这就可以算作是体验Web Service了。</p>
<p>　　从深层次上看，Web Service是一种新的Web应用程序分支，它们是自包含、自描述、模块化的应用，可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。</p>
<p>　　Web Service便是基于网络的、分布式的模块化组件，它执行特定的任务，遵守具体的技术规范，这些规范使得Web Service能与其他兼容的组件进行互操作。它可以使用标准的互联网协议，像超文本传输协议HTTP和XML，将功能体现在互联网和企业内部网上。Web Service平台是一套标准，它定义了应用程序如何在Web上实现互操作性。你可以用你喜欢的任何语言(笔者用的是C#)，在你喜欢的任何平台上写Web Service。</p>
<p>Web Service的技术支持</p>
<p>　　Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性，Web Service平台必须提供一套标准的类型系统，用于沟通不同平台、编程语言和组件模型中的不同类型系统。目前这些协议有：</p>
<p>　　1.XML和XSD</p>
<p>　　可扩展的标记语言XML?是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外，XML主要的优点在于它既与平台无关，又与厂商无关。XML是由万维网协会(W3C)创建，W3C制定的XML SchemaXSD?定义了一套标准的数据类型，并给出了一种语言来扩展这套数据类型。</p>
<p>　　Web Service平台是用XSD来作为数据类型系统的。当你用某种语言如VB.NET或C#?来构造一个Web Service时，为了符合Web Service标准，所有你使用的数据类型都必须被转换为XSD类型。如想让它使用在不同平台和不同软件的不同组织间传递，还需要用某种东西将它包装起来。这种东西就是一种协议，如 SOAP。</p>
<p>　　2.SOAP</p>
<p>　　SOAP即简单对象访问协议(Simple Object Access Protocol)，它是用于交换XML编码信息的轻量级协议。它有三个主要方面：XML-envelope为描述信息内容和如何处理内容定义了框架，将程序对象编码成为XML对象的规则，执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。例如，你可以使用 SMTP，即因特网电子邮件协议来传递SOAP消息，这可是很有诱惑力的。在传输层之间的头是不同的，但XML有效负载保持相同。</p>
<p>　　Web Service 希望实现不同的系统之间能够用“软件-软件对话”的方式相互调用，打破了软件应用、网站和各种设备之间的格格不入的状态，实现“基于Web无缝集成”的目标。</p>
<p>　　3.WSDL</p>
<p>　　Web Service描述语言WSDL?就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言，用于描述Web Service及其函数、参数和返回值。因为是基于XML的，所以WSDL既是机器可阅读的，又是人可阅读的。</p>
<p>　　4.UDDI</p>
<p>　　UDDI 的目的是为电子商务建立标准；UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范，同时也包含一组使企业能将自身提供的Web Service注册，以使别的企业能够发现的访问协议的实现标准。</p>
<p>　　5.远程过程调用RPC与消息传递</p>
<p>　　Web Service本身其实是在实现应用程序间的通信。我们现在有两种应用程序通信的方法：RPC远程过程调用?和消息传递。使用RPC的时候，客户端的概念是调用服务器上的远程过程，通常方式为实例化一个远程对象并调用其方法和属性。RPC系统试图达到一种位置上的透明性：服务器暴露出远程对象的接口，而客户端就好像在本地使用的这些对象的接口一样，这样就隐藏了底层的信息，客户端也就根本不需要知道对象是在哪台机器上。</p>
<p>　Web Service软件的支持</p>
<p>　　操作系统离不开丰富的应用软件的支持。同样，Web Service这项技术只有通过日益广泛的应用才能体现出其价值，目前比较流行的实现方法是使用.NET 和 Java两种技术，并且两种实现方法可以互相操作；如今我们已经可以看到使用微软、IBM、SUN、Borland等不同厂商的Web Service构建工具建立的Web Service应用。</p>
<p>　　微软.NET</p>
<p>　　微软的.NET技术应该算是时下最为流行的Web Service 开发技术。首先因为其公司在以前相应的产品就占有相当大的市场份额，以至使新推出的.NET得以有比较稳定的用户群；其次也是更重要的是 .NET平台不仅延续了微软一贯的编程风格，而且还增加了许多支持Web 服务的关键性技术，使得.NET在操作的简单性和执行的稳定性，高效性上达到了一个非常好的结合。</p>
<p>　　微软的Visual Studio.NET便是一个便于 Web 服务的开发工具。微软的目标是，将其新编程语言??C#作为Web Service的首选语言。虽然C#看起来与Java类似，但是还有一些Java中没有的独特的功能。.NET技术中用于Web Service 开发的主要工具是ASP.NET?从技术上说，ASPasp.net? 提供了一些超出ASP以前版本的优点(例如：代码和HTML的分离，与脚本语言相比较，对“真正”的编程语言如 C# 的支持)。</p>
<p>　　IBM的WebSphere</p>
<p>　　IBM公司是业界第一家能够提供全面支持Web服务的电子商务基础设施中间件的公司。通过多年来与W3C(The World Wide Web Consortium)的共同努力，包括DB2、Lotus、Tivoli 和WebSphere在内的所有IBM软件都实现了对SOAP、WSDL、UDDI、Linux、XML、J2EE等开放技术和标准的全面支持。　　IBM公司的WebSphere也是比较好的基础架构软件开发平台。WebSphere软件平台及开发工具包括WebSphere Studio Application Developer WSAD? 基于J2EE、XML 和Web服务等开放标准，并具备 IBM 在可靠性、扩展性和安全性上的主要优势。WebSphere 是 IBM 在 Web Services策略中的核心平台，它支持所有开发、发布、部署 Web Services应用所必需的开放标准和技术，包括 UDDI，SOAP，J2EE，WSDL，和对 XML 技术集成的增强，这特使得它在全球有很多用户。</p>
<p>　　Borland的JBuilder</p>
<p>　　Borland公司在 JBuilder7中，用户可以用其Borland Web Services Kit for Java和Borland JBuilder MobileSet 3进行更快捷地开发Web Service和无线应用。这样将使开发者能够在同一个开发环境中轻松地创建和集成Web Service。今年新推出的JBuidler8更是针对Web Service开发更提供了方便和高效的方法。</p>
<p>　　总之，在Web Service开发上，.NET 和Java都是很好的选择，尽管两者现在都有一些需要完善的地方，但是就目前来说，它们还是最好的开发手段和技术。具体选择哪种开发工具，也是仁者见仁，智者见智的问题。从根本上说，这两种方法没有孰优孰劣的问题，只是根据使用者对这两种方法的掌握程度和对具体语言的偏爱程度来决定。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2008/09/what-is-web-servic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
