7

我有一个 flex 客户端,它对运行 BlazeDS 的 tomcat 服务器进行服务调用。我想在这个环境中优雅地处理服务器会话超时。

我确实对服务有安全限制,因此客户端通过基于目标初始化 ChannelSet,然后使用该 ChannelSet 登录来对远程对象进行身份验证。

用户通过身份验证后,如果他们去喝一杯(长)杯咖啡,他们的会话将不可避免地超时。

我希望客户端检测到超时,并将用户返回到登录页面,并带有适当的信息消息。

但是我很难找到从客户端检测此超时的最佳方法。是否有可能,或者我必须让服务器在超时发生时抛出错误?

谢谢!

4

8 回答 8

1

我们实现了一个自定义 UI 服务,它不断地 ping 服务器(每 10 分钟 1 个 ping),从而防止 AppServer 关闭连接。我们还运行一些内部 UI 计时器,每次发出任何请求(“ping”除外)时都会丢弃该计时器,并使用完整的函数调用 UI 以切换回登录并显示“由于客户端不活动而导致会话过期”。

于 2010-10-22T08:31:55.340 回答
1

这不是 BlazeDS 特有的,但从 Flex 4.5(可能更早)开始,对于超时错误的故障事件有一个特定的故障代码:

在您的故障处理程序中:

if(faultEvent.fault.faultCode == "Client.Error.RequestTimeout"){
  trace("TIMEOUT ERROR");
}
于 2011-06-30T19:27:09.887 回答
1

我们为客户端编写了一个自定义组件,用于捕获击键和鼠标事件,然后在客户端处理超时。

于 2010-06-07T03:29:55.620 回答
0

在服务器端实现 FlexSessionListener 接口。它提供了一种在实际完成之前处理 Flex 会话创建/销毁的方法。

在 sessionDestroyed 处理程序上,使用消息生产者将消息从服​​务器发送到客户端,让他知道会话即将超时。

于 2010-08-05T17:33:51.013 回答
0

查看文档,看看连接断开时是否触发了事件。我想有。如果没有,请在您的连接周围使用 try/catch 并捕获任何与连接相关的问题。如果这样做,请重定向您的应用并通知用户。您可能需要使用它来查找因连接问题而引发的确切错误代码,但调试起来应该相当容易。

于 2008-11-25T16:09:05.650 回答
0

扩展 CallResponder,并覆盖故障方法。

检查 data.fault.faultCode 以获取已知错误代码,例如 ErrorMessage.MESSAGE_DELIVERY_IN_DOUBT。

如果命中,请使用本机函数 navigateToURL 进行重定向。

于 2011-07-05T18:51:51.843 回答
0

我在一个项目中遇到了这个问题,特别是因为 BlazeDS 的会话超时与实际应用程序不同(通过 ClearTrust 使用单点登录架构)。请注意,这是在 JBoss 环境中。我最终采取了一种相当简单的方法,在故障处理程序中查找 2 个特定的故障代码(有一个带有通用故障处理程序的基类):DuplicateSessionDetected 和 DeliveryInDoubt。每当 BlazeDS 尝试为相同的 JBoss 会话 ID 创建新会话时,我都会看到 DuplicateSessionDetected。DeliveryInDoubt 有时也会出现,但我不知道为什么。当我看到这些故障代码时,我采取了必要的措施来刷新应用程序(根据您的需要,您可以重定向到登录页面或其他内容)。显然,根据环境,

讨论的另一种方法是在 Flex 应用程序中使用一个表示 BlazeDS 超时计时器的计时器,但我不喜欢为此目的设置计时器。我还听说过向服务器来回发送少量数据以检查超时,但同样,这似乎不太理想。

于 2010-02-17T19:12:02.633 回答
0

我在我的一个项目中遇到了这个问题。为了克服这个问题,我每次客户端访问服务器时,无论是通过 RemoteObject 还是 HTTPService,它都会首先检查用户的身份验证,如果它已经超时,它会返回一些东西,如果它很好,它将继续它的过程。在客户端的响应处理结果事件中,客户端检查响应是否超时,如果是,它会再次转发到登录页面。据我所知,当用户的会话超时时,服务器不会向客户端抛出错误。您将只知道下次访问服务器时会话超时。

于 2010-06-28T08:41:35.523 回答