php soap举例及wsdl文件的生成
来源:互联网 发布:mac爱奇艺flash 编辑:程序博客网 时间:2024/04/30 17:02
PHP 使用soap有两种方式。
一、用wsdl文件
服务器端myservice.php
<?php
class service
{
public function HelloWorld()
{
return "Hello";
}
public function Add($a,$b)
{
return $a+$b;
}
}
$server=new SoapServer('soap.wsdl',array('soap_version' => SOAP_1_2));
$server->setClass("service");
$server->handle();
?>资源描述文件,可以用工具(zend studio)生成。其实就是一个xml文件。
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns: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:schema targetNamespace="http://localhost/interface/"> <xsd:element name="HelloWorld"> <xsd:complexType> <xsd:sequence> <xsd:element name="in" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="HelloWorldResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="out" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Add"> <xsd:complexType> <xsd:sequence> <xsd:element name="in" type="xsd:int"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="AddResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="out" type="xsd:int"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="AddRequest"> <wsdl:part name="a" type="xsd:int"></wsdl:part> <wsdl:part name="b" type="xsd:int"></wsdl:part> </wsdl:message> <wsdl:message name="AddResponse"> <wsdl:part name="c" type="xsd:int"></wsdl:part> </wsdl:message> <wsdl:portType name="TestSoap"> <wsdl:operation name="Add"> <wsdl:input message="tns:AddRequest"></wsdl:input> <wsdl:output message="tns:AddResponse"></wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="soapSOAP" type="tns:TestSoap"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="Add"> <soap:operation soapAction="http://localhost/interface/Add" /> <wsdl:input> <soap:body use="literal" namespace="http://localhost/interface/" /> </wsdl:input> <wsdl:output> <soap:body use="literal" namespace="http://localhost/interface/" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="TestSoap"> <wsdl:port binding="tns:soapSOAP" name="soapSOAP"> <soap:address location="http://localhost/interface/myservice.php"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
客户端调用client.c
<?php $soap = new SoapClient('http://localhost/interface/soap.wsdl'); echo $soap->Add(1,2); ?>
以上是我从别人博客里摘抄下来的,启动运行了,得到结果3,没问题,后面我在客户端里加上echo $soap->HelloWorld();结果这句话报错,找了好久,请高手帮忙,终于找到问题所在,原来是要把wsdl缓存给关闭,这个在调试的时候最后要关闭,真正做好了,不用修改了就可以把wsdl缓存打开。在php.ini中找到soap.wsdl_cache_enabled,默认是打开的,将其注释掉即可,最后重启web服务器。
wsdl文件的生成可以通过Zend Studio for Eclipse软件生成,步骤如下:
第一步:新建工程
点击file->new->php project,输入文件名,和服务器的目录一致,我用的apache,要使用的.php文件存放在/usr/local/apache/htdocs/interface目录下,这里就将文件名设为interface。
第二步:新建.php文件
点击file->new->PHP File,输入文件名(myservice.php),接着输入源代码,记得要给每个函数加上注释,这个通过在左窗口右击对应的函数,选择source即可自动生成。在左边窗口中右击myservice.php选择export
第三步:生成wsdl文件
在browse中选择interface,输入要生成的wsdl文件名,如soap。
最后:修改wsdl中的变量类型
这样就ok啦。
二、不用wsdl文件
服务器端
<?php
class service
{
public function HelloWorld()
{
return "Hello";
}
public function Add($a,$b)
{
return $a+$b;
}
}
$server=new SoapServer(null,array('uri' => "abcd"));
$server->setClass("service");
$server->handle();
?>
客户端
<?php
try{
$soap = new SoapClient(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:address location="http://localhost/interface/myservice.php"/> 通要填写板子的ip,但是3G网卡的ip是动态变化的,这样就很难通过第一种方式实现了。
- php soap举例及wsdl文件的生成
- php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
- php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
- php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- PHP 生成WSDL 以及 提供SOAP服务
- php中soap 的使用实例和一些个人看法!亲测,无需手写WSDL文件,提供自动生成WSDL文件类
- php中soap 的使用实例和一些个人看法!亲测,无需手写WSDL文件,提供自动生成WSDL文件类
- php wsdl SOAP WebService
- PHP Soap续:zend studio 7 生成wsdl
- Webservice的wsdl文件解析与Soap消息的发送、接收(不生成java客户端代码)
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) Webservice的wsdl文件解析与Soap消息的发送、接收(不生成java客户端代码)
- php soap实例:用zend studio 生成wsdl,php做soap服务端
- php soap连接https的wsdl报错SOAP-ERROR: Parsing WSDL:Couldn't load from
- 通过WSDL生成soap客户端代码时报的异常
- PHP SOAP模块的使用方法:NON-WSDL模式
- Web Services 的理解及SOAP, WSDL, UDDI的关系
- XML,WSDL,SOAP,JSON的关系及区别
- 代码优化的一点心得(1)
- vxworks下 数组越界 造成代码段被踩的经典例子
- 在C#中利用自动化模型操纵Word
- 移植ucos II
- 将sql数据导入到Excel
- php soap举例及wsdl文件的生成
- MeeGo开发常用测试工具及流程
- UML(1)
- XML的属性规则
- 数据结构之 插入排序
- webservices 服务器未能识别 HTTP 头 SOAPAction 的值
- 为什么中国程序员技术偏低?
- CSS优化小结
- 关于overflow hidden的研究