Ibm mobilefirst IBM Worklight 6.0-“;收到来自客户端的坏令牌“;错误经常发生

Ibm mobilefirst IBM Worklight 6.0-“;收到来自客户端的坏令牌“;错误经常发生,ibm-mobilefirst,worklight-server,Ibm Mobilefirst,Worklight Server,我有一个带有HTTP适配器的Worklight应用程序,它连接到另一个应用程序,以便检索要在移动设备上显示的数据(目前正在使用Android 4.0.4进行测试) 当应用程序启动时,我从HTTP适配器调用三个过程,并显示所有三个过程的结果 当我在浏览器中运行应用程序并将其作为普通应用程序预览时,一切正常。当我在实际手机上运行应用程序时,就会出现问题。大多数情况下,我的过程调用中有1或2个失败,数据不显示,但其中一个(第一个)似乎总是有效的。在极少数情况下,所有3个过程调用都将检索数据,但我无法始

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

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

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

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


[错误]FWLSE4007E:从客户端接收到错误令牌。服务器令牌:'null',客户端令牌:'b3fuqgdid2701hu855n89pldpk'。[工程干线]

有时,我会收到这样的错误,但它不太常见:


[错误]FWLSE0203E:从客户端接收到错误的实例Id。服务器实例Id:'3f9eveddc7br5mq3ll0nq89miu',客户端实例Id:'ut5m5f01i3bkq5l78m54uq137o'。[工程干线]

应用程序始终尝试WL.Client.invokeProcedure所有过程,当调用成功时,我的onSuccess函数运行,但当其他过程无法加载其数据时,onFailure函数永远不会出现

我的适配器如下所示:

适配器 适配器 http 10.50.22.161 9000

当我从过程中删除securityTests时,错误似乎发生得不那么频繁,但仍然会发生

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


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

这听起来很像不久前发现的竞争条件缺陷

几种可能的解决办法:

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

  • 与上面的3相同,但使用
    WL.Client.reloadApp()


  • 问题:在initOptions.js中,是否已将
    connectOnStartup
    设置为“true”或“false”

    在调用过程之前,必须调用WL.Client.connect()并等待其成功回调

    谢谢你的回复。我尝试了第二种解决方案,它不起作用,但我发现:-当所有3个过程都成功时,方法没有被调用(显然)-在某些场景中,方法只被调用了一次,似乎成功了,但我的数据仍然没有完全加载-在其他一些场景中,方法被调用了3次,第二次和第三次调用失败“无法在WL.Client.connect已执行时调用它。”尝试连接时出错。我添加了一个!WL.Client.isConnected()关于连接,但它没有帮助。我现在将尝试延迟,谢谢。我尝试在所有过程调用之前延迟10秒,但它也不起作用。为什么一个应用程序连接到另一个应用程序来检索数据?适配器如何发挥作用?适配器通过worklight server请求数据。@JonathanSweetman,我添加了另一个应用程序选项(解决方法列表中的编号1)。请尝试。我解决了问题。问题是,我在初始化中将connectOnStartup设置为false,一旦我将其更改为true,一切正常。感谢您的帮助!我在6.1.0.2版本的worklight上看到此问题。请确认此版本是否也出现此问题。 <displayName>Adapter</displayName> <description>Adapter</description> <connectivity> <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> <protocol>http</protocol> <domain>10.50.22.161</domain> <port>9000</port> </connectionPolicy> <loadConstraints maxConcurrentConnectionsPerNode="5"/> </connectivity> <procedure name="getProcesses" securityTest="securityTest" /> <procedure name="getTasks" securityTest="securityTest" /> <procedure name="metricsList" securityTest="securityTest" /> <procedure name="getMetric" securityTest="securityTest" /> <procedure name="getAllHashTags" securityTest="securityTest" /> <procedure name="getMessages" securityTest="securityTest" /> <procedure name="getMentions" securityTest="securityTest" /> <procedure name="getConversations" securityTest="securityTest" /> <procedure name="getServerTime" securityTest="securityTest" />
    wl_noDeviceProvisioningChallengeHandler.handleFailure = function() {
        WL.Client.connect();
    };