时间:2021-07-01 10:21:17 帮助过:6人阅读
WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
一个 WSDL 文档的主要结构是类似这样的:
definition of types........ definition of a message.... definition of a port....... definition of a binding....
WSDL 文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中。
类代码(SoapDiscovery.class.php):
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 = 'n n";
$serviceWSDL = 'n nservice_name.'Port" binding="tns:'.$this->service_name."Binding"> n n n";
$messageWSDL = '';
foreach ($methods as $method) {
if ($method->isPublic() && !$method->isConstructor()) {
$portTypeWSDL.= 'n".'n n";
$bindingWSDL.= 'n".' n nnn n";
$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 "nn n ";
}
}
?>
使用方法(服务端server.php):
getWSDL();
file_put_contents(WSDL_URL,$str);
}
//SOAP开启并接收Client传入的参数响应
$server = new SoapServer(WSDL_URL);
$server->setClass('HelloWorld');
$server->handle();
//测试定义公开的类
class HelloWorld {
private $nombre = '';
public function __construct($name = 'World') {$this->name = $name;}
public function greet($name = '') {$name = $name?$name:$this->name;return 'Hello '.$name.'.';}
public function serverTimestamp() {return time();}
}
?>
客户端client.php:
greet('ieliwb');
var_dump($result);
echo "The answer isresult";
}
catch (SoapFault $f){
echo "Error Message: {$f->getMessage()}";
}
?>
1. 创建wsdl
在这里我只介绍标准的webservice。那么如何创建wsdl呢?对于PHP来说这确实是件很不容易的事情,有人说用zend studio创建很方便,这是一种方法。但对于那些不喜欢用zend studio的人来说,会觉得创建一个webservice还要安装zend studio,太强人所难了,我就是,嘿嘿。
在这里我介绍一个简单的方法,到网上下载SoapDiscovery.class.php类,里面有个公用方法:getWSDL,这个方法末尾是用的return,那么,你修改一下这个方法,我是这么做的:
//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '');
//生成wsdl文件,将上面的return注释
$fso = fopen($this->class_name . ".wsdl" , "w");
fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ''));
现在生成wsdl的类有了,SoapDiscovery.class.php。
我只要再准备一个提供服务的类或者函数就可以创建wsdl了。比如我有个类:person,文件名为:person.class.php★,里面有两个方法,一个是say,一个是run。很简单。
到这里有两个类了:SoapDiscovery.class.php和person.class.php。
开始正式生成wsdl:创建文件server.php。将以下内容拷贝进去,运行即可生成一个person.wsdl文件
getWSDL(); ?>
2. 创建webservice服务端程序
将server.php文件的内容清空,复制以下代码进去:
setClass("person");//注册person类的所有方法
$objSoapServer->handle();//处理请求
?>
3. 创建webservice客户端程序,测试webservice是否有效,文件名是:client.php
say());
echo "
";
echo($client->run());
echo "
";
?>
OK,结束。.NET如果要使用的话,你只要提供一个url给他就行了。
获得url的方法:你可以先到person.wsdl文件里面查找
.NET开发人员获得你给他的url之后,就可以在自己的项目里面添加一个服务引用或者web引用了,然后就可以根据提示完成相关操作,对于使用.NET的开发人员来说很简单的。
http://www.bkjia.com/PHPjc/752376.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752376.htmlTechArticleWSDL WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。这种文档可...