2

我在使用 Channel API 时遇到问题 - 任何帮助都将不胜感激。

我对本地开发服务器上的 API 没有任何问题,但是当我把它放在 apppot 上时,我得到了一个深奥的异常。附上完整的堆栈跟踪,但标题是:

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

我已经将应用程序简化为一个 servlet 和一个 jsp(均已附加),以确保我没有做任何过于复杂的事情。阅读此论坛上的一些消息和其他消息,这可能是我对令牌与频道密钥的滥用,但我已经尝试了所有我能想到的组合,但无济于事!

servlet 片段:

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();

从堆栈跟踪来看,客户端连接到通道正常,并成功发送消息,但是将消息写回通道的 servlet 是失败的位。

非常感谢您的帮助!

代码:

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(Native Method) 在 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

我在 Google 自己的 Appengine Java API 论坛上交叉发布了这个,并在那里得到了回答。

一个总结是,当开启高复制时会出现问题(因为所有新应用程序,默认情况下,现在),并且正在使用非默认版本。

我的应用程序是最近的应用程序(因此启用了高代表),我正在尝试一系列不同的方法来让频道工作,所以我没有使用我的应用程序的默认版本。将默认值切换为指向最新版本并使用该 URL 会导致问题消失!

于 2011-05-19T07:43:11.270 回答