Zend AMF和异常处理

问题描述:

我使用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));

我真的没有想到这一点。我怎样才能使它工作?

谢谢高级!!!

那么它会序列化异常消息和代码,为我们做这项工作。部分但是。我没有注意到我从我的问题中复制了代码的服务组件包含一个异常处理程序,它将抑制异常并断开通道。我删除了异常处理程序,让异常冒泡到Zend,然后将异常消息和消息代码发送到客户端。

我想将实际的异常作为AS3对象发送,但我能说什么。通过这种方式,我将拥有序列化的异常的属性。不幸的是,自定义异常也是如此。

Zend Amf只是响应类型的序列化协议,将它们转换为AMF格式。没有错误消息被发回,因为它们通常具有敏感的安全信息。大多数其他PHP amf序列化不以这种方式工作。如果你有一个异常,你需要捕捉它并将其转换为标准的支持响应类型。同样在任何你的代码中,每个Try都需要一个Catch,因为它不是一个控制结构,即使PHP允许你避开它。

如果您已将端点配置为不生产,只需要它进行调试。

require_once'Zend/Amf/Exception。PHP的“; 抛出新的Zend_Amf_Exception('你想要的错误信息',$ errorCode);