在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.= "
$headerWSDL.= "
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 = "
$serviceWSDL = "
$messageWSDL = "";
foreach ($methods as $method) {
if ($method->isPublic() && !$method->isConstructor()) {
$portTypeWSDL.= "
$bindingWSDL.= "
$messageWSDL.= "
$parameters = $method->getParameters();
foreach ($parameters as $parameter) {
$messageWSDL.= "
}
$messageWSDL.= "
$messageWSDL.= "
$messageWSDL.= "
$messageWSDL.= "
}
}
$portTypeWSDL.= "
$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 "n
}
}
?>
使用案例:
代码如下
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文件了,这个文件网上有下载大家可百度找一下。
http://m.bbyears.com/jiaocheng/37173.html
推荐访问: