老农如是想,如是说,如是为
天才首页 > 博客 > 玩代码  >  PHP SOAP 教程 实例 wsdl应用(二)  | 登录
  今天早上和剑气又说起soap的这个事情,继上次我写了一篇关于PHP SOAP的基础教程之后,再也没有研究过SOAP的东西了,今天剑气说到WSDL的问题,我就细细的研究了一番,并把我之前的经验也一并写在这里吧。

  PHP5.1目前自身生成WSDL并不成熟,但是有了强悍的NoSoap等这些工具,生成wsdl还不是问题,我这里就不小题大做的引进NOSOAP作为例子了,还是顺手拿来.NET的WebService创建一个服务器端并生成wsdl来研究算了。

  第一步,在IIS中创建一个站点。(此步的主要目的是演示一个真正的wsdl)
  创建代码:
namespace Cjjer.Webs{
using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web;
using Cjjer;
[WebService (Name="TestWebServices",Description="测试WebServices",Namespace="http://www.5do8.com/webs/")]
public class Actor:System.Web.Services.WebService{

    [WebMethod (EnableSession=true,Description ="GetGUIDNode",MessageName="GetGUIDNode")]
    [SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Wrapped)]
    public string   GetGUIDNode(string GUID){
        return System.DateTime.Now.ToString() + "-" + GUID;
    }
};
}

  然后
csc /t:library soap.cs
把生成的dll文件放入bin目录,再创建my.asmx文件放入跟目录:
<%@WebService Class="Cjjer.Webs.Actor"%>

  访问这个文件
按此在新窗口浏览图片

  然后在地址栏的后面再输入?wsdl,可以看到:按此在新窗口浏览图片

 生成的wsdl是合法的XML文件。仔细的浏览这东西的还可以看到公开函数,执行的参数等。但是容易脸花,然后进入PHP客户端的编程吧。
 

  第二步,php使用wsdl,来发送请求

 创建一个php文件:

$ws     = "http://localhost:700/my.asmx?wsdl";
$client = new SoapClient($ws);


这两行执行完毕了就创建了SoapClent类了,然后我们可以看看该类的公开方法和数据类型:
echo("SOAP服务器提供的开放函数:");

echo('<pre>');
var_dump($client->__getFunctions());
echo('</pre>');

echo("SOAP服务器提供的Type:");

echo('<pre>');
var_dump($client->__getTypes());
echo('</pre>');


  然后输出的值我们看看:
SOAP服务器提供的开放函数:
array(2) {
  [0]=>
  string(56) "GetGUIDNodeResponse GetGUIDNode(GetGUIDNode $parameters)"
  [1]=>
  string(56) "GetGUIDNodeResponse GetGUIDNode(GetGUIDNode $parameters)"
}

SOAP服务器提供的Type:
array(2) {
  [0]=>
  string(36) "struct GetGUIDNode {
 string GUID;
}"
  [1]=>
  string(57) "struct GetGUIDNodeResponse {
 string GetGUIDNodeResult;
}"
}


   这样,需要执行的公开接口的信息一目了然,什么都很清楚了,然后执行方法即可。

  
echo("执行GetGUIDNode的结果:");

try {
$parameters=array('GUID'=>"5do8");
$username = $client->GetGUIDNode($parameters);
} catch (SoapFault $fault){
        echo "Fault! code:",$fault->faultcode,", string: ",$fault->faultstring;
}
//echo(htmlspecialchars($client->__getLastRequest()));
echo('<pre>');
var_dump($username);
echo('</pre>');


  仔细看这些代码,执行的是$client->函数名称(参数)注意,这里的函数名称就是你需要执行的,参数一般是一个数组和类,数组的键或者类的名称就是服务器端的名称,一定要对应,才能发送过去!在这个例子中,服务器端所用到的是string GUID ,然后客户端用的是array('GUID'=>"5do8"),这样就可以了。

  执行soap函数返回的知识STDclass,要查看具体的值就可以用var_dump或者print_r输出整个值,或者用foreach循环取道你想要的值:

foreach($username as $key => $val) {
    echo($val);
}


  这样就可以了。刚才剑气发了一个php生成wsdl的小代码,我一并分享发在这里吧,php生成wsdl工具:
点击浏览该文件

  写到这里基本上soap这块知识点基础的东西到此结束了。其他额深造要靠个人修为了。 
天气:晴朗,ccdot发表于2008-4-24 15:06:40,阅读了185次,共有个2回复.

写得很好

habit post in 2008-5-7 9:32:28 #1  

不错~~~~

网站推广 post in 2008-5-7 9:55:15 #2  
  1. 顺其自然,不治而治.
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容:
青花瓷 边做边爱 征途 穷开心 摇啊摇 我们的歌 感动天感动地 白狐 自由飞翔 思念是一种病 分手那天 爱死了昨天
中国话 日不落 求佛 上海滩 等一分钟 天路 老人与海 左边 凤舞九天 有没有人告诉你 遇上你是我的缘 做你的爱人
拉拉爱 大悲咒 周杰伦 刘德华 命运 等爱的玫瑰 凤凰传奇 依然在一起 樱花草 dj flash 私服 为你写诗 你的承诺
杨惠妍 股票 博客 论坛 流行歌曲 小游戏 S.H.E 王力宏 博客 加盟 月亮之上 私服 彩虹 周笔畅 蔡依林 感恩的心
搞笑 流行音乐 mp3歌曲 mp3 股票 招商 歌曲mp3 双人小游戏 dj舞曲 最新歌曲 小游戏 美女 股票 dj mp3歌曲 mp3