包 | system.web.services |
---|---|
继承 | class CWebServiceAction » CAction » CComponent |
实现 | IAction |
源自 | 1.0 |
版本 | $Id: CWebServiceAction.php 3426 2011-10-25 00:01:09Z alexander.makarow $ |
源码 |
CWebServiceAction实现一个提供Web服务的动作。
CWebServiceAction服务有两个目的。一方面, 它显示WSDL中指定的Web服务API的内容。另一方面,它调用请求的Web service API。一个GET参数名为
默认情况下,CWebServiceAction将使用当前控制器 作为Web service提供者。参见CWsdlGenerator如何声明 可以远程调用的方法。
请注意,PHP SOAP扩展对于这一动作是必需的。
CWebServiceAction服务有两个目的。一方面, 它显示WSDL中指定的Web服务API的内容。另一方面,它调用请求的Web service API。一个GET参数名为
ws
,
用来区分这两个方面:GET参数的存在
指示执行后者的行动。
默认情况下,CWebServiceAction将使用当前控制器 作为Web service提供者。参见CWsdlGenerator如何声明 可以远程调用的方法。
请注意,PHP SOAP扩展对于这一动作是必需的。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
classMap | array | 在WSDL中声明复杂类型的PHP类的列表。 这应该是一个WSDL类型作为键和名称作为值的PHP类的数组。 一个PHP类,也可以指定一个路径别名。 | CWebServiceAction |
controller | CController | 拥有这个动作的控制器。 | CAction |
id | string | 动作的ID。 | CAction |
provider | mixed | Web service提供者的对象或者类名。 如果指定一个类名,它可以是一个路径别名。 默认为null,这意味着当前控制器是作为服务提供者。 如果提供者实现了接口IWebServiceProvider, 这将是能够拦截远程方法调用,并执行额外的任务 (如验证,写日志)。 | CWebServiceAction |
service | CWebService | 返回目前正在使用的Web服务实例。 | CWebServiceAction |
serviceOptions | array | 为CWebService对象初始属性值。 数组键是CWebService的属性名称, 数组中的值是相应的属性的初始值。 | CWebServiceAction |
serviceUrl | string | Web service的URL。默认为null,这意味着 这个动作的URL是用来提供Web服务。 在这种情况下,一个命名为serviceVar的GET参数 将被用来确定当前请求是否是WSDL或Web服务的。 | CWebServiceAction |
serviceVar | string | GET参数的区别从一个Web服务请求的 WSDL请求的名称。如果存在这个GET参数,请求被认为是作为一个Web服务请求, 否则,它是一个WSDL请求。默认为“ws”。 | CWebServiceAction |
wsdlUrl | string | WSDL的URL。默认为null,这意味着 这个动作的URL是用来服务的WSDL文档。 | CWebServiceAction |
公共方法
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
createWebService() | 创建CWebService实例。 | CWebServiceAction |
runWithParamsInternal() | 执行一个带有命名参数的对象的方法。 | CAction |
属性详细
classMap
属性
public array $classMap;
在WSDL中声明复杂类型的PHP类的列表。 这应该是一个WSDL类型作为键和名称作为值的PHP类的数组。 一个PHP类,也可以指定一个路径别名。
provider
属性
public mixed $provider;
Web service提供者的对象或者类名。 如果指定一个类名,它可以是一个路径别名。 默认为null,这意味着当前控制器是作为服务提供者。 如果提供者实现了接口IWebServiceProvider, 这将是能够拦截远程方法调用,并执行额外的任务 (如验证,写日志)。
service
属性
只读
public CWebService getService()
返回目前正在使用的Web服务实例。
serviceOptions
属性
public array $serviceOptions;
为CWebService对象初始属性值。 数组键是CWebService的属性名称, 数组中的值是相应的属性的初始值。
serviceUrl
属性
public string $serviceUrl;
Web service的URL。默认为null,这意味着 这个动作的URL是用来提供Web服务。 在这种情况下,一个命名为serviceVar的GET参数 将被用来确定当前请求是否是WSDL或Web服务的。
serviceVar
属性
public string $serviceVar;
GET参数的区别从一个Web服务请求的 WSDL请求的名称。如果存在这个GET参数,请求被认为是作为一个Web服务请求, 否则,它是一个WSDL请求。默认为“ws”。
wsdlUrl
属性
public string $wsdlUrl;
WSDL的URL。默认为null,这意味着 这个动作的URL是用来服务的WSDL文档。
方法详细
createWebService()
方法
protected CWebService createWebService(mixed $provider, string $wsdlUrl, string $serviceUrl)
| ||
$provider | mixed | Web服务提供者的类名或对象 |
$wsdlUrl | string | WSDL的URL。 |
$serviceUrl | string | Web service的URL。 |
{return} | CWebService | Web service的实例 |
protected function createWebService($provider,$wsdlUrl,$serviceUrl)
{
return new CWebService($provider,$wsdlUrl,$serviceUrl);
}
创建CWebService实例。 你可以重写此方法自定义创建的实例。
getService()
方法
public CWebService getService()
| ||
{return} | CWebService | Web service的实例 |
public function getService()
{
return $this->_service;
}
返回目前正在使用的Web服务实例。
run()
方法
public void run()
|
public function run()
{
$hostInfo=Yii::app()->getRequest()->getHostInfo();
$controller=$this->getController();
if(($serviceUrl=$this->serviceUrl)===null)
$serviceUrl=$hostInfo.$controller->createUrl($this->getId(),array($this->serviceVar=>1));
if(($wsdlUrl=$this->wsdlUrl)===null)
$wsdlUrl=$hostInfo.$controller->createUrl($this->getId());
if(($provider=$this->provider)===null)
$provider=$controller;
$this->_service=$this->createWebService($provider,$wsdlUrl,$serviceUrl);
if(is_array($this->classMap))
$this->_service->classMap=$this->classMap;
foreach($this->serviceOptions as $name=>$value)
$this->_service->$name=$value;
if(isset($_GET[$this->serviceVar]))
$this->_service->run();
else
$this->_service->renderWsdl();
Yii::app()->end();
}
执行动作。 如果GET参数serviceVar存在,这个动作处理远程方法调用。 如果没有,动作将调用服务的WSDL内容;