网站建设及推广人员,哔哩哔哩推广平台,自己做的网站在百度怎么发布,wordpress百度云盘一#xff0e; 必备知识1.wsdl(web服务标记语言)WSDL(网络服务描述语言#xff0c;Web Services Description Language)是一门基于 XML 的语言#xff0c;用于描述 Web Services 以及如何对它们进行访问。具体参考请访问下面网址2.soapSOAP 是一种简单的基于 XML 的协议 必备知识1.wsdl(web服务标记语言)WSDL(网络服务描述语言Web Services Description Language)是一门基于 XML 的语言用于描述 Web Services 以及如何对它们进行访问。具体参考请访问下面网址2.soapSOAP 是一种简单的基于 XML 的协议它使应用程序通过 HTTP 来交换信息。具体参考请访问下面网址3.php扩展具体参考请访问下面网址二 php soap开发模式1. working in swdl mode(契约先行(Contract first)模式)契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。也就是用soap通讯的时候必须先有一个定义过的服务接口才能进行通讯。2. working in non-swdl mode(代码先行(Code first)模式)在代码先行模式中首先要先写出实现服务的代码。然后在大多数情况下代码会产生一个契约换种说法一个WSDL。接着客户端在使用服务的时候就可以使用那个WSDL来获得服务的接口。尽管如此PHP5的扩展并没有从代码输出一个WSDL的规定考虑到这种情况可以在non-WSDL模式下使用 SoapServer和SoapClient。也就是说在soap通讯的时候并不需要一个预先定义过的服务接口代码会自动的产生。三参考例子下面介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言使用WSDL模式来实现服务和客户端会比较容易。1. noWSDL模式实现服务端 server.phpclass test{/**** return string*/function show(){return hello world!;}}#####################################################$server new SoapServer(null, array(uri http://test-uri/));$server-setClass(test);$server-handle();?客户端 client.php$soapnew SoapClient(null, array(location http://soapserver_url/server.php,print_r($soap-__getFunctions());echo $soap-show();?2. WSDL模式实现第一步编写服务端类文件class..phpclass test{/**** return string*/function show(){return hello world!;}}?第二步将类文件生成 wsdl文件server.wsdl。由于wsdl文件编写比较复杂所以我们用第三方工具生成。我们以zend studio为例子演示Tools WSDL Generator Configration name : test; WSDL file name: server 点击 选择上面的创建的class.php 这时候会看到一个 classes?? : URL Location的映射,保留 test类前面的勾并将其url 设置为 SOAP Server的urlhttp://soapserver_url/server.php 点击FinishZDE就会创建一个非常漂亮的WSDL了?? 工作基本上完成了.第三步服务端编写:require class..php ; //引入类文件$server new SoapServer(server.wsdl);$server-setClass(test);$server-handle();?第四步客户端编写$soap new SoapClient(http:// soapserver_url/server.wsdl);print_r($soap-__getFunctions());echo $soap-show();以上两个例子只是一个简单的soap服务编写已经可以满足大部分需要。如果需要更加高级的功能请参考其他方面的资料。三 出现的问题。1.在方法中对属性的赋值在其他方法中不起作用。比如在客户端调用服务端某个方法对某个属性赋值。在其他方法里就不能用。但在 __construct 方法中对属性的赋值是可以个在其他方法中使用的。2. 提示 Client] looks like we got no XML document错误。服务器端文件在?php ? 标签前后都不要有任何数据包括空格空行。3. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity原因如下PHP程序作为 SOAP客户端 采用 WSDL 模式访问远端服务器的时候PHP是通过调用 libcurl 实现的。至少在 PHP5.2.X 是这样的。如果采用 non-WSDL 模式就不需要 libcurl。在solaris 没有缺省安装 libcurl也许是我没有安装。除了 了ibcurl以外至少还关联的库包括libidn,ibgcc,libiconv,libintl,openssl