PHP中XML通信应用(四 XML远程通讯服务(二))

第四篇   XML 远程通讯服务 ( )

上一篇,对 XML-RPC 进行了简单的介绍,并写了一个我自己程序里的例子。我现在介绍一下 SOAP (简单对象访问协议), SOAP 要比 XML-RPC 简单多了。 SOAP 的工作原理图与第三篇( XML 远程通讯服务 ( ) )中的 XML-RPC 原理图基本原理一致,只是 SOAP 不止可以与 HTTP 协议结合使用,其他传输协议也可以。比如: SMTP MIME..

SOAP 最主要的工作是使用标准的 XML 描述了 RPC 的请求信息 (URI/ / 方法 / 参数 / 返回值 ) SOAP 也是一段 XML ,通过传输协议发送它至目标对象。 SOAP RPC 一样都是跨语言、跨平台的。

SOAP 请求方结构

POST /WebService/SoapServer.php HTTP/1.0

User_Agent: PEAR-SOAP 0.7.1

Host: 192.168.4.142

Content-Type: text/xml;charset=UF-8

Content-Length: 657

SOAPAction:
“”
 
<?xml version="1.0" encoding="utf-8"?>



<SOAP-ENV:Envelope
 xmlns:SOAP-ENV
="http://schemas.xmlsoap.org/soap/envelope/"
><SOAP-ENV:Body
>
<SOAP-ENV:Body
>
******************
</SOAP-ENV:Body
></SOAP-ENV:Envelope
>
 

SOAP 返回放结构

HTTP/1.1 200 OK

Date: Thu, 12 May 2011 07:58:00 GMT

Server: Apache/2.2.17 (Unix) PHP/5.2.14

X-Powered-By: PHP/5.2.14

Content-Length: 65

Content-Type: text/XML; charset=UF-8

 

<?xml version="1.0" encoding="utf-8"?>



<SOAP-ENV:Envelope
 xmlns:SOAP-ENV
="http://schemas.xmlsoap.org/soap/envelope/"
><SOAP-ENV:Body
>
<SOAP-ENV:Body
>
******************
</SOAP-ENV:Body
></SOAP-ENV:Envelope
>

上面是截取的网络传输信息。

在使用方面 SOAP 可比 XML-RPC 简单太多了,下面是我曾经写过的一个例子(无 WSDL )。

SOAP 服务器端:

include_once 'soapfunc.php' ;

//$soap = new SoapServer ( "soap.wsdl",  array('soap_version' => SOAP_1_2,'encoding'=>'UTF-8'));  // 使用 WSDL

$soap = new SoapServer ( null , array ( 'location' => "http://" . $_SERVER [ "HTTP_HOST" ] . "/WebService/soapserver.php" , 'uri' => "http://" . $_SERVER [ "HTTP_HOST" ] . "/WebService/" , 'encoding' => 'UTF-8' ) );

 

$soap->addFunction ( 'CheckMember' ); // 添加方法

$soap->addFunction ( SOAP_FUNCTIONS_ALL );

$soap->handle ();

SOAP 客户端:

$client = new SoapClient( null , array ( 'location' => "http://192.168.4.142/WebService/soapserver.php" ,

                                     'uri'      => "http://192.168.4.142/WebService/" ));

$array = array ( 'no' => **** );

$result = $client->CheckMember($array);

简单吧!

SOAP 扩展还支持 WSDL WSDL Web Services Description Language )它是描述 web 服务的,是描述怎样访问 web 服务的, WSDL 是用来描述 SOAP 的,是描述 Web 服务的 XML 词汇集。换句话说, WSDL 文件告诉你调用 SOAP 所需要知道的一切,省的去编写开发文档来告诉调用函数的方法、参数、返回值,它对 WEB 服务的调用函数及其具体参数、返回值有了详细的说明, WSDL 也是一段 XML 。现在各个语言对 WSDL 的支持都很成熟,可以根据同一份 WSDL 文件生成自己语言的客户端。

WSDL 文件包括 7 部分 :types, Message, Part , Operation , PortType,Binding service 七部分 .

1 Types 定义:类型定义 , 独立于语言 . 对应于 SOAP 消息中要传输的元素 数据类型定义( string int
      2  Message
要传递的数据。每个 web 方法对应两个 message 定义 in out. message 的定义包含了头和体

3  Part :消息参数

4  Operation :服务支持的操作的抽象描述
      5  portType/ Interface
一个或多个端点支持的操作的抽象集;每个 web service 对应一个 PortType, PortType 中又包含了对其发布的方法。    此名称也已更改,因此可能会遇到两者中的任何一个。
      6  Bindings
:指定每 porttype 中每个操作 ( 类以及方法 ) 的绑定信息 , 包含 input output 的消息的格式 .    
      7  service
:每个 web service 绑定的 port 信息。

使用 WSDL ,程序更加简单。只需要在客户端和服务器端在实例化类 SoapClient SoapServer 时,将 wsdl 文件当做参数就可以了。

实话实说, WSDL 的编写确实非常麻烦,手工编写的成功率基本上很低,一般都是通过工具来实现,我使用 ZendStudio VisualStudio 进行生成。具体的生成方法网上有很多文章。

写了3天终于将文章全部写完了,我对 XML 尤其是 Web 服务的梳理就告一段落了,怕自己忘掉,写下来。 有不对的地方,请大家给我指明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值