【问题标题】:IBM Worklight 6.0 - "Received bad token from client" error occurs frequentlyIBM Worklight 6.0 - “Received bad token from client”错误频繁发生
【发布时间】:2013-07-18 22:37:16
【问题描述】:

我有一个带有 HTTP 适配器的 Worklight 应用程序,它连接到另一个应用程序以检索要在移动设备上显示的数据(目前正在使用 Android 4.0.4 进行测试)。

当应用程序启动时,我从我的 HTTP 适配器调用三个过程并显示所有三个过程的结果。

当我在浏览器中运行我的应用程序并将其预览为通用时,一切正常。
当我在实际手机上运行应用程序时会出现问题。大多数情况下,我的过程调用中的 1 或 2 个失败并且数据不显示,但似乎其中一个(第一个)似乎总是有效。在极少数情况下,所有 3 个过程调用都会检索数据,但我无法始终如一地重现这种情况。

当过程失败时,我在 Worklight Development Server 控制台中收到错误消息:

[ERROR ] FWLSE4007E: Received bad token from client. Server token:'null', client token:'b3fuqgdid2701hu855n89pldpk'. [project trunk]

有时,我会收到此错误,但不太常见:

[ERROR ] FWLSE0203E: Received bad instance Id from client. Server instance Id:'3f9eveddc7br5mq3ll0nq89miu', client instance Id:'ut5m5f01i3bkq5l78m54uq137o'. [project trunk]

应用程序总是尝试 WL.Client.invokeProcedure 所有过程,当调用成功时,我的 onSuccess 函数运行,但是当其他过程无法加载它们的数据时,onFailure 函数永远不会发生。

我的适配器如下所示:

适配器适配器http协议>
        10.50.22.161域>
        9000端口>
    连接性>

当我从程序中删除 securityTests 时,错误似乎不太频繁发生,但仍然发生。

这里有什么问题?或者如何调试 Worklight Server 以确定原因?

我正在使用版本为 6.0.0.20130701-1413 的 Eclipse Worklight 插件。

【问题讨论】:

    标签: ibm-mobilefirst worklight-server


    【解决方案1】:

    这听起来与不久前发现的竞争条件缺陷非常相似。

    几种可能的解决方法:

    1. 确保WL.Client.connect调用适配器程序之前
    2. 在应用程序启动后允许一些延迟,然后才调用适配器过程
    3. 您也可以尝试将其添加到您的 JavaScript:

      wl_noDeviceProvisioningChallengeHandler.handleFailure = function() {
          WL.Client.connect();
      };
      
    4. 与上述 3 相同,但使用 WL.Client.reloadApp()

    问题:在initOptions.js中,你将connectOnStartup设置为“true”还是“false”?

    【讨论】:

    • 感谢您的回复。我尝试了第二个解决方案,它不起作用,但这是我发现的: - 当所有 3 个过程都成功时,该方法没有被调用(显然) - 在某些情况下,该方法只被调用一次,看似成功,但我的数据仍然没有完全加载 - 在其他一些场景中,该方法被调用了 3 次,第二次和第三次出现“无法调用 WL.Client.connect 而它已经在执行”。尝试连接时出错。我在连接周围添加了一个 !WL.Client.isConnected() ,但它没有帮助。我现在试试延迟,谢谢。
    • 我尝试在我的所有程序调用之前延迟 10 秒,但它也不起作用。
    • 为什么一个应用连接到另一个应用来检索数据?那么适配器是如何发挥作用的呢?适配器通过 worklight 服务器请求数据。
    • @JonathanSweetman,我添加了另一个选项(解决方法列表中的第 1 位)。请尝试一下。
    • 我解决了这个问题。问题是我在 init 中的 connectOnStartup 等于 false,一旦我将其更改为 true,一切正常。感谢您的帮助!
    【解决方案2】:

    在调用程序之前,您必须调用 WL.Client.connect() 并等待它的成功回调。

    【讨论】:

    • 我在 6.1.0.2 版本的 worklight 上看到了这个问题,您能否确认它是否也在这个版本上发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多