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

最新下载

热门教程

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">
n
n
n";
$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文件了,这个文件网上有下载大家可百度找一下。

热门栏目