php5 调用webservice,PHP5 SOAP调用.NET WebService

在xmapp中测试时发现.NET WebService的函数调用变化的话,PHP中却没有变,原来是PHP对wsdl进行了缓存,只要在tmp文件夹下删除相应的缓存文件就可以了。相关文字如下:

What are the problems with WSDL? The only argument against using it is that the client has to load the relevant WSDL document from the server before the RPC can be made, and this can take a significant amount of time in a Web environment. In order to speed things up, PHP's ext/soap uses a WSDL caching feature that can be controlled through setting the soap.wsdl_cache_enabled, soap.wsdl_cache_dir and soap.wsdl_cache_ttl configuration directives, either in your php.ini or by using ini_set()(see Example 4 ). By default, WSDL caching is turned on and caches WSDL files for one day.

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文件放入跟目录:

访问这个文件

200842415849681.gif

然后在地址栏的后面再输入?wsdl,可以看到:

200842415925385.gif

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

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

创建一个php文件:

$ws     = "http://localhost:700/my.asmx?wsdl";

$client = new SoapClient($ws);

这两行执行完毕了就创建了SoapClent类了,然后我们可以看看该类的公开方法和数据类型:

echo("SOAP服务器提供的开放函数:");

echo('

');

var_dump($client->__getFunctions());

echo('

');

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

echo('

');

var_dump($client->__getTypes());

echo('

');

然后输出的值我们看看:

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('

');

var_dump($username);

echo('

');

仔细看这些代码,执行的是

$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这块知识点基础的东西到此结束了。其他额深造要靠个人修为了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值