zoukankan      html  css  js  c++  java
  • PHP写webservice服务端

    1) WebService技术介绍

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术。仅仅有通过Web Service,client和server才可以自由的用HTTP进行通信。不论两个程序的平台和变成语言是什么。

    XMLSOAPWSDLWeb Service平台的三大技术:

    WebService採用HTTP协议数据传输。採用XML格式封装数据,即XML中说明调用远程服务对象的哪个方法、传递的參数是什么、以及服务对象的返回结果是什么。

    XMLWebService平台中表示数据的格式。除了易于建立和易于分析外,XML基本的有点在于它既是平台无关的,又是厂商无关的。

    SOAPWebService通过HTTP协议发送请求和接收结果时。发送的请求内容和结果内容都採用XML格式封装,并添加了一些特定的HTTP消息头。以说明HTTP消息的内容格式。这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service

    SOAP协议 = HTTP协议 + XML数据格式。

    WSDLWeb Service Description Language)是基于XML的语言。用于描写叙述Web Service及其函数、參数和返回值,它是WebServiceclient和server端都能理解的标准格式。

    由于是基于XML的,所以WSDL及时机器可阅读的。又是人可阅读的。WSDL文件保存在Webserver上,通过一个url地址就能够訪问到它。client要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。

    WebService服务提供商能够通过两种方式来暴露它的WSDL文件地址:1、注冊到UUIDserver,以便被人查找;2、直接告诉给client调用者。

    2) Apache相关配置

    为了可以实现Web Servicehttpd必须支持soap的扩展,这里以yum安装httpdsoap扩展为例进行说明:

    1> 安装httpd

       yum install httpd

    2> 安装php

       yum install php

    3> 配置httpd支持php解析

       在/etc/httpd/conf/httpd.conf中加入例如以下:

       AddType application/x-httpd-php .php

       AddType application/x-httpd-php-source .phps

    4> 又一次启动httpd

       service httpd restart

    5> 检查是否安装了soap扩展

       /usr/bin/php -m | grep soap  //! 假设存在则说明已经安装了soap扩展,假设不存在,运行下一步

    6> 安装soap扩展

       yum install php-soap //! 安装完之后再次检查。重新启动httpd

    7> 验证soap扩展是否正确安装

       既能够通过php -m | grep soap的方式,也能够通过phpinfo();的方式。

    3) PHP实现WebService服务端

    1> 定义服务类——Service.php

    该服务端就是实现你想要对外提供的接口,如果我们须要对外提供一个函数,它接收一个字符串。然后返回”Hello ” + 输入的字符串这个小功能,服务类非常easy,例如以下所看到的:

    <?

    php class Service { public function sayHello($content) { return "Hello ".$content; } } ?>

    2> 生成wsdl文件——create_wsdl.php

        为了生成wsdl文件,我们能够使用网上提供的SoapDiscovery.class.php中的getWSDL提供的方法来实现。该SoapDiscovery.class.php的代码在网上能够下载到,为了生成文件,我们须要改动getWSDL方法中的部分代码(加上写文件的代码),例如以下所看到的:

    //return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
    			
    			//!凝视掉return,加入例如以下代码。目的是为了调用getWSDL生成.wsdl文件
    			$fso = fopen($this->class_name.".wsdl", "w");
    			fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>'));
                            fclose($fso);

    如今我们就能够定义自己的create_wsdl.php了,仅仅须要调用一下这种方法就可以。例如以下:

    <?php 
    	include("Service.php");
    	include("SoapDiscovery.class.php");	
    	//! 第一个參数是类名。生成的wsdl文件就是以它来命名的。第二个參数是服务的名称,能够随便写
    	$disco = new SoapDiscovery('Service', 'soap');
    	$disco->getWSDL();
    ?

    >

    3> 改动服务端——Service.php

    改动Service.php。加入一些代码,例如以下所看到的:

    <?php
       class Service
       {
    		public function sayHello($content)
    		{
    		      return "Hello ".$content;
    		}
       }
      
       $service = new SoapServer('http://192.168.17.129/soap/Service.wsdl', array('soap_version' => SOAP_1_2));
       $service->setClass("Service"); //! 注冊Service类的全部方法
       $service->handle(); //! 处理请求
    ?>

    4> 改动Service.wsdl文件

      

    5> 客户端測试——client.php

    client.php用来測试我们刚写的Web Server的服务端是否能可用,代码例如以下:

    <?

    php $soap = new SoapClient('http://192.168.17.129/soap/Service.php?

    wsdl'); echo $soap->sayHello("houqd2012"); ?>

    输出结果例如以下:

    Hello houqd2012

  • 相关阅读:
    java8关于list的操作
    jdk8的.toMap()
    Mybatis中报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题解决
    springboot集成bootstrap遇到的问题
    java文件下载
    idea中mybatis自动生成代码方式
    文件读写操作inputStream转为byte[] , 将InputStream写入本地文件
    Polar transformer networks
    Fine-Grained Person Re-identification
    Person Re-identification by Contour Sketch under Moderate Clothing Change
  • 原文地址:https://www.cnblogs.com/llguanli/p/6790401.html
Copyright © 2011-2022 走看看