2

Channel API に問題があります。何か助けていただければ幸いです。

ローカル dev サーバー上の API には問題はありませんが、appspot に置くと難解な例外がスローされます。完全なスタック トレースが添付されていますが、見出しは次のとおりです。

com.google.appengine.api.channel.ChannelFailureException: An unexpected error occurred.     
Caused by: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Unknown

過度に複雑なことをしていないことを確認するために、アプリをサーブレットと jsp (両方とも添付) に煮詰めました。このフォーラムやその他のメッセージを読むと、トークンとチャネル キーの誤用かもしれませんが、考えられるすべての組み合わせを試してみましたが、役に立ちませんでした。

サーブレットのスニペット:

ChannelService channelService = ChannelServiceFactory.getChannelService();
String channelKey = getChannelKey(userService.getCurrentUser().getUserId());
String token = channelService.createChannel(channelKey);

ChannelService channelService = ChannelServiceFactory.getChannelService();
channelService.sendMessage(new ChannelMessage(channelKey, message)); 

jsp のスニペット:

channel = new goog.appengine.Channel(channelToken);
socket = channel.open();

スタック トレースから、クライアントはチャネルに正常に接続しており、メッセージを正常に送信していますが、メッセージをチャネルに書き戻すサーブレットが少し失敗しています。

助けてくれてありがとう!

コード:

ChannelTestController.java

ChannelTestPage.jsp

ログ:

/ChannelTestMessage.do com.google.appengine.api.channel.ChannelFailureException: 予期しないエラーが発生しました。com.google.appengine.api.channel.ChannelServiceImpl.getExceptionForError(ChannelServiceImpl.java:112) で com.google.appengine.api.channel.ChannelServiceImpl.sendMessage(ChannelServiceImpl.java:68) で com.webstersmalley.chessweb.web .ChannelTestController.sendMessage(ChannelTestController.java:74) の com.webstersmalley.chessweb.web.ChannelTestController.getChannelTestMessage(ChannelTestController.java:68) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で java.lang.reflect.Method.invoke(Method.java:

4

1 に答える 1

2

Appengine Java API に関する Google 独自のディスカッション フォーラムにこれを相互投稿したところ、そこで回答が得られました。

要約すると、高レプリケーションがオンになっているときに問題が発生し (すべての新しいアプリがデフォルトで現在)、デフォルト以外のバージョンが使用されているということです。

私のアプリは最近のもので (そのため高レップがオンになっていました)、チャネルを機能させるためにさまざまな方法を試していたので、アプリのデフォルト バージョンを使用していませんでした。デフォルトを最新バージョンを指すように切り替え、その URL を使用すると、問題が解消されました。

于 2011-05-19T07:43:11.270 に答える