Yii Framework v1.1.10 绫诲弬鑰

CWebService

system.web.services
缁ф壙 class CWebService » CComponent
婧愯嚜 1.0
鐗堟湰 $Id: CWebService.php 3515 2011-12-28 12:29:24Z mdomba $
婧愮爜 framework/web/services/CWebService.php
CWebService灏佽浜哠OAP鏈嶅姟鍜屾彁渚涘熀浜嶹SDL鐨刉ebService銆

鏈被闇瑕丳HP鐨凷OAP鎵╁睍鏂瑰彲姝e父杩愯銆

CWebService鍒╃敤CWsdlGenerator渚垮彲鑷姩鑱旀満鐢熸垚WSDL锛 鍏嶅幓鑷繁鍐橶SDL鐨勫鏉傞夯鐑︺

鐢熸垚WSDL鏄熀浜庢湇鍔℃彁渚涚被涓殑娉ㄩ噴鍧楋紝 璋冪敤generateWsdl鎴栬renderWsdl銆傚鐞唚eb service 璇锋眰锛岃皟鐢run

鍏叡灞炴

闅愯棌缁ф壙灞炴

灞炴绫诲瀷鎻忚堪瀹氫箟鍦
actor string 鎸囧畾SOAP service鐨刟ctor銆傞粯璁や负null锛屽嵆涓嶆寚瀹氥 CWebService
cacheID string 鐢ㄤ簬鍦ㄧ紦瀛樼粍浠朵腑缂撳瓨宸茬粡鐢熸垚鐨刉SDL鐨処D銆 榛樿鍊间负鈥檆ache鈥橈紝鎻愪氦鍒颁富缂撳瓨缁勪欢銆 濡傛灉涓嶄娇鐢ㄧ紦瀛橈紝璇疯缃负False銆 CWebService
classMap array 鍦╓SDL涓澹版槑涓哄鏉傜被鍨嬬殑绫荤殑鍒楄〃銆 杩欏簲璇ユ槸涓涓互WSDL涓0鏄庣殑绫诲瀷涓篕ey锛屽搴旂殑PHP绫诲悕涓哄肩殑鏁扮粍銆 绫诲悕鍙互浣跨敤鍒悕鏉ヨ〃绀恒 CWebService
encoding string Web service鐨勭紪鐮佺被鍨嬨傞粯璁や负鈥楿TF-8鈥欍 CWebService
methodName string 褰撳墠璇锋眰鐨勬柟娉曞悕绉般傚间负绌哄垯琛ㄧず娌℃湁鏂规硶琚姹傘 CWebService
persistence integer SOAP server鐨勬寔涔呮ā寮忋 CWebService
provider string|object 鎻愪緵web service鐨勭被鎴栬呭璞° 褰撳间负鍚嶇О鏃讹紝姝ゅ鍙互浣跨敤鍒悕鏉ヨ〃绀恒 CWebService
serviceUrl string Web service鐨刄RL銆傚湪璋冪敤generateWsdl()renderWsdl()鏃跺繀椤绘彁渚涙灞炴с CWebService
soapVersion string 鎸囧畾SOAP鐗堟湰锛堜緥濡傦細鈥1. CWebService
wsdlCacheDuration integer 鐢熸垚鐨刉SDL鍦ㄧ紦瀛樹腑淇濆瓨鐨勭鏁帮紝榛樿涓0锛屽嵆涓嶇紦瀛樸 CWebService
wsdlUrl string WSDL鐨刄RL銆傚湪璋冪敤run()鏃跺繀椤绘彁渚涙灞炴с CWebService

鍙椾繚鎶ゅ睘鎬

闅愯棌缁ф壙灞炴

灞炴绫诲瀷鎻忚堪瀹氫箟鍦
options array 鍒涘缓SoapServer瀹炰緥鐨勭浉鍏抽厤缃」銆 CWebService

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__call() 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 CComponent
__construct() 鏋勯犳柟娉曘 CWebService
__get() 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 CComponent
__isset() 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 CComponent
__set() 璁剧疆涓涓粍浠剁殑灞炴у笺 CComponent
__unset() 璁剧疆涓涓粍浠剁殑灞炴т负null銆 CComponent
asa() 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° CComponent
attachBehavior() 闄勫姞涓涓涓哄埌缁勪欢銆 CComponent
attachBehaviors() 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 CComponent
attachEventHandler() 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 CComponent
canGetProperty() 纭畾灞炴ф槸鍚﹀彲璇汇 CComponent
canSetProperty() 纭畾灞炴ф槸鍚﹀彲鍐欍 CComponent
detachBehavior() 浠庣粍浠朵腑鍒嗙涓涓涓恒 CComponent
detachBehaviors() 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 CComponent
detachEventHandler() 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 CComponent
disableBehavior() 绂佺敤涓涓檮鍔犺涓恒 CComponent
disableBehaviors() 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
enableBehavior() 鍚敤涓涓檮鍔犺涓恒 CComponent
enableBehaviors() 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
evaluateExpression() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 CComponent
generateWsdl() 鏍规嵁鎻愪緵web service鐨勭被鎴栬呭璞$殑瀹氫箟鐢熸垚WSDL銆 CWebService
getEventHandlers() 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 CComponent
getMethodName() 杩斿洖褰撳墠璇锋眰鐨勬柟娉曞悕绉般傚间负绌哄垯琛ㄧず娌℃湁鏂规硶琚姹傘 CWebService
handleError() PHP閿欒澶勭悊鍣ㄣ CWebService
hasEvent() 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 CComponent
hasEventHandler() 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 CComponent
hasProperty() 纭畾灞炴ф槸鍚﹁瀹氫箟銆 CComponent
raiseEvent() 鍙戣捣涓涓簨浠躲 CComponent
renderWsdl() 鏍规嵁鎻愪緵web service鐨勭被鎴栬呭璞$殑瀹氫箟鐢熸垚鍜屾樉绀篧SDL銆 CWebService
run() 澶勭悊web service璇锋眰銆 CWebService

鍙椾繚鎶ゆ柟娉

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
getOptions() 杩斿洖鍒涘缓SoapServer瀹炰緥鐨勭浉鍏抽厤缃」銆 CWebService

灞炴ц缁

actor 灞炴
public string $actor;

鎸囧畾SOAP service鐨刟ctor銆傞粯璁や负null锛屽嵆涓嶆寚瀹氥

cacheID 灞炴
public string $cacheID;

鐢ㄤ簬鍦ㄧ紦瀛樼粍浠朵腑缂撳瓨宸茬粡鐢熸垚鐨刉SDL鐨処D銆 榛樿鍊间负鈥檆ache鈥橈紝鎻愪氦鍒颁富缂撳瓨缁勪欢銆 濡傛灉涓嶄娇鐢ㄧ紦瀛橈紝璇疯缃负False銆

classMap 灞炴
public array $classMap;

鍦╓SDL涓澹版槑涓哄鏉傜被鍨嬬殑绫荤殑鍒楄〃銆 杩欏簲璇ユ槸涓涓互WSDL涓0鏄庣殑绫诲瀷涓篕ey锛屽搴旂殑PHP绫诲悕涓哄肩殑鏁扮粍銆 绫诲悕鍙互浣跨敤鍒悕鏉ヨ〃绀恒

encoding 灞炴
public string $encoding;

Web service鐨勭紪鐮佺被鍨嬨傞粯璁や负鈥楿TF-8鈥欍

methodName 灞炴 鍙
public string getMethodName()

褰撳墠璇锋眰鐨勬柟娉曞悕绉般傚间负绌哄垯琛ㄧず娌℃湁鏂规硶琚姹傘

options 灞炴 鍙
protected array getOptions()

鍒涘缓SoapServer瀹炰緥鐨勭浉鍏抽厤缃」銆

persistence 灞炴
public integer $persistence;

SOAP server鐨勬寔涔呮ā寮忋

provider 灞炴
public string|object $provider;

鎻愪緵web service鐨勭被鎴栬呭璞° 褰撳间负鍚嶇О鏃讹紝姝ゅ鍙互浣跨敤鍒悕鏉ヨ〃绀恒

serviceUrl 灞炴
public string $serviceUrl;

Web service鐨刄RL銆傚湪璋冪敤generateWsdl()renderWsdl()鏃跺繀椤绘彁渚涙灞炴с

soapVersion 灞炴
public string $soapVersion;

鎸囧畾SOAP鐗堟湰锛堜緥濡傦細鈥1.1鈥欐垨鈥1.2鈥欙級銆傞粯璁や负null锛屽嵆涓嶆寚瀹氥

wsdlCacheDuration 灞炴
public integer $wsdlCacheDuration;

鐢熸垚鐨刉SDL鍦ㄧ紦瀛樹腑淇濆瓨鐨勭鏁帮紝榛樿涓0锛屽嵆涓嶇紦瀛樸

wsdlUrl 灞炴
public string $wsdlUrl;

WSDL鐨刄RL銆傚湪璋冪敤run()鏃跺繀椤绘彁渚涙灞炴с

鏂规硶璇︾粏

__construct() 鏂规硶
public void __construct(mixed $provider, string $wsdlUrl, string $serviceUrl)
$provider mixed 鎻愪緵web service鐨勭被鎴栬呭璞°
$wsdlUrl string WSDL鐨刄RL銆傝皟鐢run()鏂规硶鏃跺繀椤绘彁渚涙椤广
$serviceUrl string Web service鐨刄RL銆傝皟鐢generateWsdl()renderWsdl()鏂规硶鏃跺繀椤绘彁渚涙椤广
婧愮爜锛 framework/web/services/CWebService.php#90 (鏄剧ず)
public function __construct($provider,$wsdlUrl,$serviceUrl)
{
    
$this->provider=$provider;
    
$this->wsdlUrl=$wsdlUrl;
    
$this->serviceUrl=$serviceUrl;
}

鏋勯犳柟娉曘

generateWsdl() 鏂规硶
public string generateWsdl()
{return} string 鐢熸垚鐨刉SDL
婧愮爜锛 framework/web/services/CWebService.php#132 (鏄剧ず)
public function generateWsdl()
{
    
$providerClass=is_object($this->provider) ? get_class($this->provider) : Yii::import($this->provider,true);
    if(
$this->wsdlCacheDuration>&& $this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null)
    {
        
$key='Yii.CWebService.'.$providerClass.$this->serviceUrl.$this->encoding;
        if((
$wsdl=$cache->get($key))!==false)
            return 
$wsdl;
    }
    
$generator=new CWsdlGenerator;
    
$wsdl=$generator->generateWsdl($providerClass,$this->serviceUrl,$this->encoding);
    if(isset(
$key))
        
$cache->set($key,$wsdl,$this->wsdlCacheDuration);
    return 
$wsdl;
}

鏍规嵁鎻愪緵web service鐨勭被鎴栬呭璞$殑瀹氫箟鐢熸垚WSDL銆 鑻ヨ缃簡缂撳瓨涓旂紦瀛樺瓨鍦紝閭d箞浼氱洿鎺ヤ娇鐢ㄧ紦瀛樹腑鐨勫唴瀹广

鍙傝

getMethodName() 鏂规硶
public string getMethodName()
{return} string 褰撳墠璇锋眰鐨勬柟娉曞悕绉般傚间负绌哄垯琛ㄧず娌℃湁鏂规硶琚姹傘
婧愮爜锛 framework/web/services/CWebService.php#206 (鏄剧ず)
public function getMethodName()
{
    if(
$this->_method===null)
    {
        if(isset(
$HTTP_RAW_POST_DATA))
            
$request=$HTTP_RAW_POST_DATA;
        else
            
$request=file_get_contents('php://input');
        if(
preg_match('/<.*?:Body[^>]*>\s*<.*?:(\w+)/mi',$request,$matches))
            
$this->_method=$matches[1];
        else
            
$this->_method='';
    }
    return 
$this->_method;
}

getOptions() 鏂规硶
protected array getOptions()
{return} array 鍒涘缓SoapServer瀹炰緥鐨勭浉鍏抽厤缃」銆
婧愮爜锛 framework/web/services/CWebService.php#226 (鏄剧ず)
protected function getOptions()
{
    
$options=array();
    if(
$this->soapVersion==='1.1')
        
$options['soap_version']=SOAP_1_1;
    else if(
$this->soapVersion==='1.2')
        
$options['soap_version']=SOAP_1_2;
    if(
$this->actor!==null)
        
$options['actor']=$this->actor;
    
$options['encoding']=$this->encoding;
    foreach(
$this->classMap as $type=>$className)
    {
        
$className=Yii::import($className,true);
        if(
is_int($type))
            
$type=$className;
        
$options['classmap'][$type]=$className;
    }
    return 
$options;
}

handleError() 鏂规硶
public void handleError(CErrorEvent $event)
$event CErrorEvent PHP閿欒浜嬩欢
婧愮爜锛 framework/web/services/CWebService.php#101 (鏄剧ず)
public function handleError($event)
{
    
$event->handled=true;
    
$message=$event->message;
    if(
YII_DEBUG)
    {
        
$trace=debug_backtrace();
        if(isset(
$trace[2]) && isset($trace[2]['file']) && isset($trace[2]['line']))
            
$message.=' ('.$trace[2]['file'].':'.$trace[2]['line'].')';
    }
    throw new 
CException($message,self::SOAP_ERROR);
}

PHP閿欒澶勭悊鍣ㄣ

renderWsdl() 鏂规硶
public void renderWsdl()
婧愮爜锛 framework/web/services/CWebService.php#118 (鏄剧ず)
public function renderWsdl()
{
    
$wsdl=$this->generateWsdl();
    
header('Content-Type: text/xml;charset='.$this->encoding);
    
header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($wsdl,'8bit') : strlen($wsdl)));
    echo 
$wsdl;
}

鏍规嵁鎻愪緵web service鐨勭被鎴栬呭璞$殑瀹氫箟鐢熸垚鍜屾樉绀篧SDL銆

鍙傝

run() 鏂规硶
public void run()
婧愮爜锛 framework/web/services/CWebService.php#151 (鏄剧ず)
public function run()
{
    
header('Content-Type: text/xml;charset='.$this->encoding);
    if(
YII_DEBUG)
        
ini_set("soap.wsdl_cache_enabled",0);
    
$server=new SoapServer($this->wsdlUrl,$this->getOptions());
    
Yii::app()->attachEventHandler('onError',array($this,'handleError'));
    try
    {
        if(
$this->persistence!==null)
            
$server->setPersistence($this->persistence);
        if(
is_string($this->provider))
            
$provider=Yii::createComponent($this->provider);
        else
            
$provider=$this->provider;

        if(
method_exists($server,'setObject'))
            
$server->setObject($provider);
        else
            
$server->setClass('CSoapObjectWrapper',$provider);

        if(
$provider instanceof IWebServiceProvider)
        {
            if(
$provider->beforeWebMethod($this))
            {
                
$server->handle();
                
$provider->afterWebMethod($this);
            }
        }
        else
            
$server->handle();
    }
    catch(
Exception $e)
    {
        if(
$e->getCode()!==self::SOAP_ERROR// non-PHP error
        
{
            
// only log for non-PHP-error case because application's error handler already logs it
            // php <5.2 doesn't support string conversion auto-magically
            
Yii::log($e->__toString(),CLogger::LEVEL_ERROR,'application');
        }
        
$message=$e->getMessage();
        if(
YII_DEBUG)
            
$message.=' ('.$e->getFile().':'.$e->getLine().")\n".$e->getTraceAsString();

        
// We need to end application explicitly because of
        // http://bugs.php.net/bug.php?id=49513
        
Yii::app()->onEndRequest(new CEvent($this));
        
$server->fault(get_class($e),$message);
        exit(
1);
    }
}

澶勭悊web service璇锋眰銆

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.