2011-01-13 131 views
1

我使用FlashBuilder工具創建了一個Zend AMF服務。我想嘗試的是改變其中一個自動創建的方法來拋出異常,以便查看行爲。而不是異常被序列化回我的Flex應用程序,它給了我以下內容:Zend AMF和異常處理

[RPC Fault faultString =「Channel disconnected」faultCode =「Client.Error.DeliveryInDoubt」faultDetail = ] at mx.rpc :: AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal :: faultHandler()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ Mx \ rpc \ AbstractInvoker.as:345] at mx.rpc :: Responder/fault()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ mx \ rpc \ Responder.as:68]在NetConnectionMessageResponder/channelDisconnectHandler()上的mx.rpc :: AsyncRequest/fault()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ mx \ rpc \ AsyncRequest.as:113] \ dev的\ 4.0.0 \框架\項目\ RPC \ SRC \ MX \消息\通道\ NetConnectionChannel.as :684] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.messaging :: Channel/disconnectSuccess()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ mx \ messaging \ Channel.as:1214] at mx.messaging.channels :: NetConnectionChannel/internalDisconnect()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ mx \ messages \ channels \ NetConnectionChannel.as:175] at mx.messaging.channels :: AMFChannel/internalDisconnect()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ mx \ messaging \ channels \ AMFChannel .as:355] at mx.messaging.channels :: AMFChannel/statusHandler()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ mx \ messaging \ channels \ AMFChannel.as:445]

通道斷開...

[RPC故障faultString = 「通道斷開」 的faultcode = 「Client.Error.DeliveryInDoubt」 faultDetail = 「通道斷開收到確認之前」]

這是代碼:

公共職能getAllUser(){

$stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename"); 
$this->throwExceptionOnError(); 

mysqli_stmt_execute($stmt); 
$this->throwExceptionOnError(); 

$rows = array(); 

mysqli_stmt_bind_result($stmt, $row->id, $row->user_group_id, $row->username, $row->password, $row->active, $row->activation_key, $row->timezone, $row->created_on, $row->modified_on); 

while (mysqli_stmt_fetch($stmt)) { 
$row->created_on = new DateTime($row->created_on); 
$row->modified_on = new DateTime($row->modified_on); 
$rows[] = $row; 
$row = new stdClass(); 
mysqli_stmt_bind_result($stmt, $row->id, $row->user_group_id, $row->username, $row->password, $row->active, $row->activation_key, $row->timezone, $row->created_on, $row->modified_on); 
} 

mysqli_stmt_free_result($stmt); 
mysqli_close($this->connection); 

$errorCode = 1; 

      throw(new Exception('the error message you want', $errorCode)); 

return $rows; 

}

通知throw語句:

throw(new Exception('the error message you want',$ errorCode));

我真的沒有想到這一點。我怎樣才能使它工作?

謝謝高級!!!

回答

0

那麼它會序列化異常消息和代碼,爲我們做這項工作。部分但是。我沒有注意到我從我的問題中複製了代碼的服務組件包含一個異常處理程序,它將抑制異常並斷開通道。我刪除了異常處理程序,讓異常冒泡到Zend,然後將異常消息和消息代碼發送到客戶端。

我想將實際的異常作爲AS3對象發送,但我能說什麼。通過這種方式,我將擁有序列化的異常的屬性。不幸的是,自定義異常也是如此。

0

Zend Amf只是響應類型的序列化協議,將它們轉換爲AMF格式。沒有錯誤消息被髮回,因爲它們通常具有敏感的安全信息。大多數其他PHP amf序列化不以這種方式工作。如果你有一個異常,你需要捕捉它並將其轉換爲標準的支持響應類型。同樣在任何你的代碼中,每個Try都需要一個Catch,因爲它不是一個控制結構,即使PHP允許你避開它。

如果您已將端點配置爲不生產,只需要它進行調試。

require_once'Zend/Amf/Exception。PHP的「; 拋出新的Zend_Amf_Exception('你想要的錯誤信息',$ errorCode);