PHP中soap的使用例子

PHP 使用soap有两种方式。

一、用wsdl文件

服务器端。

<?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>
客户端调用
<?php
$soap = new SoapClient(‘http://localhost/interface/soap.wsdl‘);
echo $soap->Add(1,2);
?>
二、不用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);
}
?>

  

时间: 2024-08-08 09:38:52

PHP中soap的使用例子的相关文章

php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正"办事"的那个,提供一种办事接口的统称. WSDL提供"能办的事的文档说明":  对要提供的服务的一种描述格式.我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型. SOAP提供"请求"的规范:  向服务接口传递请求的格式,包括方法和参数等.你想让人家办事,总得告诉人家

Oracle中的存储过程简单例子

---创建表 create table TESTTABLE ( id1  VARCHAR2(12), name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE (ID1, NAME) values ('1', 'zhangsan'); insert into TESTTABLE (ID1, NAME) values ('2', 'lisi'); insert into TESTTABLE (ID1

Spark(Python) 从内存中建立 RDD 的例子

Spark(Python) 从内存中建立 RDD 的例子: myData = ["Alice","Carlos","Frank","Barbara"]myRdd = sc.parallelize(myData)myRdd.take(2) ----In [52]: myData = ["Alice","Carlos","Frank","Barbara"

CSS布局中应用BFC的例子

BFC是啥? BFC(Block Formatting Context),“块状格式化上下文”.简单地说,它提供一个独立的布局环境.在同一个BFC中,盒子会一个挨一个地排列,margin边距还会在垂直方向上叠加.float和clear:float也只会在同一个BFC内有效. 产生BFC的情况有? W3C标准中这样描述:Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cel

python核心编程中网络爬虫的例子

1 #!/usr/bin/env python 2 3 import cStringIO # 4 import formatter # 5 from htmllib import HTMLParser # We use various classes in these modules for parsing HTML. 6 import httplib # We only need an exception from this module 7 import os # This provides

2018-02-17-生活中无处不在的非线性例子

layout: post title: 2018-02-17-生活中无处不在的非线性例子 key: 20180217 tags: 非线性 modify_date: 2018-02-17 --- 生活中无处不在的非线性例子 说明 本文发布于: gitee,博客园. 转载和引用请指明原作者和连接及出处. 这里的内容只作为作者的理论探讨之用,仅供分享交流,并不明示或暗示任何倾向性的建议或意见. 摘要 本文举了几个小例子来展示生活中无处不在的非线性. 正文 生活中充满了非线性,可以这么说,非线性即是一切

SQL Server 中同时操作的例子:

在SQL 中同一逻辑阶段的操作是同时发生的. 先有一个例子做为带入: declare @x as int =1;declare @y as int =2;set @[email protected];set @[email protected];select @x,@y;go -- 最后select 的结果是 x=2.y=2!这个结果在大家看来.来的是这么的理直气壮. 那么好我们看一下一个.这次我不把x,y 保存在变量里而是保存到表里. create table t(x int,y int);

Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See

iOS 8 Share Extension Safari URL Example(在iOS中分享url的例子)

ios8 的Extension给我们提供了很多神奇的功能,以后分享内容再也不用进入app了,让我们的手机更安全,下面我们以在safari 浏览器中分享一个web url 来讲述Share Extension的工作原理 1 新建一个Share Extension target 参考http://blog.csdn.net/wjsxiaoweige/article/details/39524291phone Extension的建立 2  配置info.plist  在NSExtensionActi