我使用4D移动连接从Wakanda Enterpise v11到4D服务器并连接到远程数据存储。我尊重60分钟的超时值。
在4D,on 4D Mobile Authentication Method
,所有数据都很好($1
包含用户名,$2
包含密码。)
当不活动时间超过60分钟且尝试发送wakanda请求时,{4} on 4D Mobile Authentication Method
,$1
上的$2
,..值为空并返回“错误”。
如何在没有重启/重新加载Wakanda服务器功能的wakanda服务器/模型的情况下续订/重新连接连接,或者如何将超时设置为无限制?
我正在尝试使用
恢复与4D服务器的连接mergeoutsidecatalog()
没有任何作用
答案 0 :(得分:1)
超时(仅基于对象的语法):4D服务器上的客户端连接超时(传递表示分钟的数字)。 每个需要对外部4D数据库进行REST访问的客户端查询将在4D服务器端创建或使用客户端连接(进程),保持客户端上下文。默认情况下,连接在60分钟不活动后关闭。您可以将此超时时间减少到15分钟,具体取决于您的需求。
因此,为了保持连接处于活动状态,您需要在超时之前发送查询。
问题是,一旦超时,你就无法再次呼叫mergeoutsidecatalog()
;它只能在加载Model对象时完成,因此您需要重新启动Wakanda。 mergeoutsidecatalog()
文档中记录了此行为:
当加载当前的Model对象时,即在Model.js文件的上下文中,必须调用此方法。
检查currentSession()
可能会帮助您隔离最终用户会话到期时间,但我不认为将用户重定向到登录页面会有所帮助,因为Wakanda服务器将无法呼叫mergeoutsidecatalog()
没有重新加载模型(即重新启动Wakanda)。
如果您希望4D和Wakanda之间的连接能够 无限期 ,那么您需要:
a)将超时增加到一个非常大的数字(可能会尝试0以查看它是否禁用超时)
或
b)通过在超时超时之前发送查询来维持与4D服务器的心跳连接
答案 1 :(得分:0)
我认为您可以做的最好的事情是,在您向服务器发送任何请求之前,您将测试会话过期。
您可以使用currentSession()
。如果它返回“默认访客”,则表示会话已过期。然后,您将用户重定向到登录页面。
答案 2 :(得分:0)
我记得在这些方面遇到问题。检查以确保您的4D服务器具有Wakanda许可证。我发现服务器不喜欢没有许可证。确保您的服务器上有4D Mobile Client许可证。默认情况下,您拥有0个许可证,除非您购买了一定数量的座位的开发者许可证。
答案 3 :(得分:0)
我会考虑许可证问题。我将mergeoutsidecatalog()调用的超时设置为5分钟,Wakanda Session超时默认为60分钟。因此,在我的会话超时之前,我与4D服务器的连接超时,并且在下次调用Wakanda的4D方法时重新建立这些连接没有问题。我这样做是为了限制我的4D移动许可证中的任何一个超过必要的时间。在我的情况下,我的四维移动方法都没有维护选择,我没有访问任何4D表作为Wakanda中的数据源,我只调用4D移动方法,通过4D移动方法返回的对象从4D中的其他4D表返回数据。 4D Mobile Methods都属于同一个表,其中不包含实际记录。
答案 4 :(得分:0)
我看到你希望让Wakanda会议保持活力。
我相信解决方案就是如何调用login方法。
您是否在客户端呼叫loginByKey()
,例如,对用户进行身份验证? loginByPassword()
和login()
将是客户端进行身份验证的其他方式。
我了解到你可以提供lifeTime
参数,这是Wakanda会话的持续时间。我不相信我在飞行中成功延长了这一点,但我将其设置为一个非常大的值,并在客户端使用waf.directory.logout()
手动处理即将到期的Wakanda会话。 (您可以在服务器端使用forceExpire()
,这可能是手动使会话过期的更好方法)
以下是lifeTime
参数的使用方法:
waf.directory.loginByKey(username, pass, 10800)
10800
是lifeTime
参数,这是Wakanda会话的最长生命周期。如果您不自己指定,则默认为较低的数字。我不确定这个参数的时间单位。我相信它在几秒钟内--- 10800 / 60 would be 180 minutes, or 3 hours.
如果您处理好会话管理,您可以将其设置为非常高的数字,并且只需手动记录人员。如果这些信息有用,我也可以就此设置提出建议。