一聚教程网:一个值得你收藏的教程网站

热门教程

php生成wsdl文件方法总结

时间:2022-06-25 05:45:42 编辑:袖梨 来源:一聚教程网

在zend studio9中,与之前版本不一样的是,你需要单独安装wsdl插件,才可以使用,步骤如下:

1、打开zendstudio9,选择help(帮助)->welcome(欢迎

2、在右边的列表中找到WSDL Support,勾选

3、点击Apply changes(应用修改)

4、zde会自动安装,然后提示要重启,点击restart now(现在重新启动)

wsdl支持安装完毕,下面我们来生成一个wsdl文件,步骤如下:

1、选择保存wsdl的项目文件夹

2、右键-new(新建)->other(其他)

3、在弹出的对话框中选择web services,在下级菜单中选择WSDL file,点击next进入下一步

4、命名你的wsdl文件,点击next进入下一步

5、修改target namespace(目标名称空间),其他不变,点击finish。

一个wsdl文件生成完毕,如下图所示:

TestSoapSoap下面填写php webService 如soapservice.php

在NewOperation上点击鼠标右键:
NewOperation:添加方法。WebService里需要提供给别人调用的方法名
input :设置输入参数名和类型
output:设置返回值。
Add part:如果在input里添加,就是添加多个参数
set Type / set Element: 设置参数的input/output类型Type包含常见的数据类型(int,string,boolean,float,time…),Element就是自定义元素类型。

.利用SoapDiscovery.class.php生成

 代码如下 复制代码
class SoapDiscovery {
 private $class_name = '';
 private $service_name = '';
 
 /**
  * SoapDiscovery::__construct() SoapDiscovery class Constructor.
  *
  * @param string $class_name
  * @param string $service_name
  **/
 public function __construct($class_name = '', $service_name = '') {
  $this->class_name = $class_name;
  $this->service_name = $service_name;
 }
 
 /**
  * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
  *
  * @return string
  **/
 public function getWSDL() {
  if (empty($this->service_name)) {
   throw new Exception('No service name.');
  }
  $headerWSDL = "n";
  $headerWSDL.= "n";
  $headerWSDL.= "n";
 
  if (empty($this->class_name)) {
   throw new Exception('No class name.');
  }
  
  $class = new ReflectionClass($this->class_name);
  
  if (!$class->isInstantiable()) {
   throw new Exception('Class is not instantiable.');
  }
  
  $methods = $class->getMethods();
  
  $portTypeWSDL = '';
  $bindingWSDL = 'nn";
  $serviceWSDL = 'nnservice_name.'Port" binding="tns:'.$this->service_name."Binding">nnn";
  $messageWSDL = '';
  foreach ($methods as $method) {
   if ($method->isPublic() && !$method->isConstructor()) {
    $portTypeWSDL.= 'n".'ngetName()."Response" />nn";
    $bindingWSDL.= 'n".'nnnnnnn";
       $messageWSDL.= 'n";
    $parameters = $method->getParameters();
    foreach ($parameters as $parameter) {
     $messageWSDL.= 'n";
    }
    $messageWSDL.= "
n";
    $messageWSDL.= 'n";
    $messageWSDL.= 'n";
    $messageWSDL.= "
n";
   }
  }
  $portTypeWSDL.= "
n";
  $bindingWSDL.= "n";
  return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '
');
 }
 
 /**
  * SoapDiscovery::getDiscovery() Returns discovery of WSDL.
  *
  * @return string
  **/
 public function getDiscovery() {
  return "nnn";
 }
}
 
?>

使用案例:

 代码如下 复制代码

    include("Compute.php"); //你要生成的文件
    include("SoapDiscovery.class.php");
   
    $disco = new SoapDiscovery('Compute','Compute');//第一个参数是类名(生成的wsdl文件就是以它来命名的),即person类,第二个参数是服务的名字(这个可以随便写)。
    $wsdl = $disco->getWSDL();
    //$disco->getDiscovery();
    $fp = fopen("Compute.wsdl", "w");
    fwrite($fp, $wsdl);
?>


方法二最重要的就是我们的SoapDiscovery.class.php文件了,这个文件网上有下载大家可百度找一下。

热门栏目