php soap举例及wsdl文件的生成
2011-09-20 16:05
711 查看
PHP使用soap有两种方式。
一、用wsdl文件
服务器端myservice.php
二、不用wsdl文件
服务器端
一、用wsdl文件
服务器端myservice.php
<?php
classservice
{
publicfunctionHelloWorld()
{
return"Hello";
}
publicfunctionAdd($a,$b)
{
return$a+$b;
}
}
$server=newSoapServer('soap.wsdl',array('soap_version'=>SOAP_1_2));
$server->setClass("service");
$server->handle();
?> 资源描述文件,可以用工具(zendstudio)生成。其实就是一个xml文件。
<?xmlversion="1.0"encoding="UTF-8"?><wsdl:definitionsxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:tns="http://localhost/interface/"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"xmlns:xsd="http://www.w3.org/2001/XMLSchema"name="soap"targetNamespace="http://localhost/interface/"><wsdl:types><xsd:schematargetNamespace="http://localhost/interface/"><xsd:elementname="HelloWorld"><xsd:complexType><xsd:sequence><xsd:elementname="in"type="xsd:string"/></xsd:sequence></xsd:complexType></xsd:element><xsd:elementname="HelloWorldResponse"><xsd:complexType><xsd:sequence><xsd:elementname="out"type="xsd:string"/></xsd:sequence></xsd:complexType></xsd:element><xsd:elementname="Add"><xsd:complexType><xsd:sequence><xsd:elementname="in"type="xsd:int"></xsd:element></xsd:sequence></xsd:complexType></xsd:element><xsd:elementname="AddResponse"><xsd:complexType><xsd:sequence><xsd:elementname="out"type="xsd:int"></xsd:element></xsd:sequence></xsd:complexType></xsd:element></xsd:schema></wsdl:types><wsdl:messagename="AddRequest"><wsdl:partname="a"type="xsd:int"></wsdl:part><wsdl:partname="b"type="xsd:int"></wsdl:part></wsdl:message><wsdl:messagename="AddResponse"><wsdl:partname="c"type="xsd:int"></wsdl:part></wsdl:message><wsdl:portTypename="TestSoap"><wsdl:operationname="Add"><wsdl:inputmessage="tns:AddRequest"></wsdl:input><wsdl:outputmessage="tns:AddResponse"></wsdl:output></wsdl:operation></wsdl:portType><wsdl:bindingname="soapSOAP"type="tns:TestSoap"><soap:bindingstyle="document"transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operationname="Add"><soap:operationsoapAction="http://localhost/interface/Add"/><wsdl:input><soap:bodyuse="literal"namespace="http://localhost/interface/"/></wsdl:input><wsdl:output><soap:bodyuse="literal"namespace="http://localhost/interface/"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:servicename="TestSoap"><wsdl:portbinding="tns:soapSOAP"name="soapSOAP"><soap:addresslocation="http://localhost/interface/myservice.php"/></wsdl:port></wsdl:service></wsdl:definitions>
客户端调用client.c
<?php$soap=newSoapClient('http://localhost/interface/soap.wsdl');echo$soap->Add(1,2);?>
以上是我从别人博客里摘抄下来的,启动运行了,得到结果3,没问题,后面我在客户端里加上echo$soap->HelloWorld();结果这句话报错,找了好久,请高手帮忙,终于找到问题所在,原来是要把wsdl缓存给关闭,这个在调试的时候最后要关闭,真正做好了,不用修改了就可以把wsdl缓存打开。在php.ini中找到soap.wsdl_cache_enabled,默认是打开的,将其注释掉即可,最后重启web服务器。
wsdl文件的生成可以通过ZendStudioforEclipse软件生成,步骤如下:
第一步:新建工程
点击file->new->phpproject,输入文件名,和服务器的目录一致,我用的apache,要使用的.php文件存放在/usr/local/apache/htdocs/interface目录下,这里就将文件名设为interface。
第二步:新建.php文件
点击file->new->PHPFile,输入文件名(myservice.php),接着输入源代码,记得要给每个函数加上注释,这个通过在左窗口右击对应的函数,选择source即可自动生成。在左边窗口中右击myservice.php选择export
第三步:生成wsdl文件
在browse中选择interface,输入要生成的wsdl文件名,如soap。
最后:修改wsdl中的变量类型
这样就ok啦。
二、不用wsdl文件
服务器端
<?php
classservice
{
publicfunctionHelloWorld()
{
return"Hello";
}
publicfunctionAdd($a,$b)
{
return$a+$b;
}
}
$server=newSoapServer(null,array('uri'=>"abcd"));
$server->setClass("service");
$server->handle();
?>
客户端
<?php
try{
$soap=newSoapClient(null,array("location"=>"http://localhost/interface/soap.php","uri"=>"abcd","style"=>SOAP_RPC,"use"=>SOAP_ENCODED));
echo$soap->Add(1,2);}
catch(Exction$e)
{echo print_r($e->getMessage(), true);}
?>
这种比较重要,当外网和外网服务器直接访问,比如:通过自己的电脑访问我带3G网卡的板子时,就必须使用非wsdl方式,在wsdl方式中<soap:addresslocation="http://localhost/interface/myservice.php"/>通要填写板子的ip,但是3G网卡的ip是动态变化的,这样就很难通过第一种方式实现了。
相关文章推荐
- php中soap 的使用实例和一些个人看法!亲测,无需手写WSDL文件,提供自动生成WSDL文件类
- php中使用zendstudio 12为soapserver生成wsdl文件
- php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- PHP webserver 之 soap 生成wsdl文件
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- php中soap 的使用实例和一些个人看法!亲测,无需手写WSDL文件,提供自动生成WSDL文件类
- php中soap 的使用实例和一些个人看法!亲测,无需手写WSDL文件,提供自动生成WSDL文件类(转)
- php中soap 的使用实例和一些个人看法!亲测,无需手写WSDL文件,提供自动生成WSDL文件类
- php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
- php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
- PHP 生成 WSDL 文件工具类 SoapDiscovery.class.php
- php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
- php学习之道:php中soap的使用实例以及生成WSDL文件,提供自己主动生成WSDL文件的类库——SoapDiscovery.class.php类
- php 使用zendstudio 生成webservice文件 wsdl
- PHP Soap续:zend studio 7 生成wsdl
- Webservice的wsdl文件解析与Soap消息的发送、接收(不生成java客户端代码)
- php5.3中webservice利用soap—WSDL文件解析-WSDL : 描述你的Web服务(转载)
- php zend studio 自动生成wsdl文件详解
- php soap实例:用zend studio 生成wsdl,php做soap服务端