2011-01-13 39 views
1

私はFlashBuilderツールを使用してZend AMFサービスを作成しました。私が試したかったのは、自動的に作成されたメソッドの1つを変更して、その動作を見るために例外をスローすることでした。Zend AMFと例外処理

[RPCフォールトフォールトストリング= "チャネル切断" 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:mx.rpc ::レスポンダで345] /障害()[E:\ DEV \ 4.0.0 \枠組み\プロジェクト\ RPC \ SRC \ MX \ RPC \ Responder.as:68] at mx.rpc :: AsyncRequest/fault()[E:\ dev \ 4.0.0 \ frameworks \ projects \ rpc \ src \ mx \ rpc \ AsyncRequest.as:113] at 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() at mx.messaging :: Channel/disconnectSuccess()[E:\ dev \ 4.0.0 \ frameworks] \プロジェクト\ RPC \ SRC \ MX \メッセージング\ Channel.as:mx.messaging.channelsで1214] :: NetConnectionChannelは/ internalDisconnect()[E:\ DEV \ 4.0.0 \枠組み\プロジェクト\ RPC \ SRC \ MX \メッセージング\チャンネル\ NetConnectionChannel.as:mx.messaging.channelsで175] ::たAMFChannel/internalDisconnect()[E:\ DEV 4.0.0 \枠組み\ \プロジェクト\ RPC \ SRC \ MX \メッセージング\チャンネル\たAMFChannel .as:mx.messaging.channelsで355] ::たAMFChannel /たstatusHandler()[E:\ DEV 4.0.0 \枠組み\ \プロジェクト\ RPC \ SRC \ MX \メッセージング\チャンネル\ 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(新しい例外( 'あなたが必要とするエラーメッセージ'、$ errorCode));

私は本当にこのことを期待していませんでした。どうすればそれを動作させることができますか?

ありがとうございました!

答えて

0

それは私たちのために仕事をする例外メッセージとコードをシリアル化します。部分的だがそれはする。私は私の質問のコードをコピーしたサービスコンポーネントが例外を抑制し、チャンネルを切断するだけの例外ハンドラを含んでいることに気付かなかった。例外ハンドラを削除して、例外メッセージをZendに送って、例外メッセージとメッセージコードをクライアントに送信しました。

私は実際の例外をAS3オブジェクトとして送信したいと思いますが、どうすればいいですか。このようにして、例外のプロパティもシリアル化されます。残念ながらカスタム例外の場合も同じです。

0

のZend AMFはAMF形式にそれらをキャストするために、応答タイプの単なる直列化プロトコルです。通常、機密情報が含まれているため、エラーメッセージは返送されません。他のほとんどのPHP amfシリアライゼーションはこのように動作しません。例外がある場合は、それを捕まえて標準サポートの応答タイプに変換する必要があります。また、あなたのコードのすべてで、PHPがあなたがそれを手放すことを許しても、コントロール構造ではないので、すべてのTryはCatchを必要とします。

プロダクションにならないようにエンドポイントを設定していて、デバッグ用にエンドポイントが必要な場合は、

require_once 'Zend/Amf/Exception。php '; 新しいZend_Amf_Exceptionをスローする( 'あなたが望むエラーメッセージ'、$ errorCode);