Exception handling Zend AMF和异常处理

Exception handling Zend AMF和异常处理,exception-handling,flex4,zend-amf,Exception Handling,Flex4,Zend Amf,我已经使用FlashBuilder工具创建了一个Zend AMF服务。我想尝试的是更改其中一个自动创建的方法以抛出异常,以便查看行为。它没有将异常序列化回我的Flex应用程序,而是提供以下内容: [RPC Fault faultString=“Channel disconnected”faultCode=“Client.Error.DeliveryInDoubt”faultDetail=“在收到确认之前已断开通道”] 在mx.rpc::AbstractInvoker/http://www.ado

我已经使用FlashBuilder工具创建了一个Zend AMF服务。我想尝试的是更改其中一个自动创建的方法以抛出异常,以便查看行为。它没有将异常序列化回我的Flex应用程序,而是提供以下内容:

[RPC Fault faultString=“Channel disconnected”faultCode=“Client.Error.DeliveryInDoubt”faultDetail=“在收到确认之前已断开通道”] 在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] 在mx.rpc::Responder/fault()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:68] 在mx.rpc::AsyncRequest/fault()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:113] 在NetConnectionMessageResponder/channelDisconnectHandler()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:684] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() 在mx.messaging::Channel/disconnectSuccess()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\messaging\Channel.as:1214] 在mx.messaging.channels::NetConnectionChannel/internalDisconnect()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:175] 在mx.messaging.channels::AMFChannel/internalDisconnect()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\messaging\channels\AMFChannel.as:355] 在mx.messaging.channels::AMFChannel/statusHandler()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\messaging\channels\AMFChannel.as:445]

通道断开连接

[RPC Fault faultString=“Channel disconnected”faultCode=“Client.Error.DeliveryInDoubt”faultDetail=“在收到确认之前已断开通道”]

代码如下:

公共函数getAllUser(){

}

请注意throw语句:

抛出(新异常(“您想要的错误消息,$errorCode”)

我真没想到会这样。我怎样才能让它工作


提前谢谢你

Zend Amf只是响应类型的序列化协议,用于将它们转换为Amf格式。不会发回任何错误消息,因为它们通常包含敏感的安全信息。大多数其他PHP amf序列化都不是这样工作的。如果您有异常,您需要捕获它并将其转换为标准支持响应类型。此外,在任何代码中,每次尝试都需要一个Catch,因为它不是一个控制结构,即使PHP允许您侥幸逃脱

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

需要一次“Zend/Amf/Exception.php”;
抛出新的Zend_Amf_异常('所需的错误消息',$errorCode)

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

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

$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;