如果设备离线,MobileFirst 8.0 C# WorklightResourceRequest.Send() 将挂起

Posted

技术标签:

【中文标题】如果设备离线,MobileFirst 8.0 C# WorklightResourceRequest.Send() 将挂起【英文标题】:MobileFirst 8.0 C# WorklightResourceRequest.Send() hangs if device is offline 【发布时间】:2017-03-07 12:56:37 【问题描述】:

我为客户开发原生 Windows 10 客户端 LOB 应用。 环境:Windows 10 Pro(在移动客户端/平板电脑和开发人员盒子上),带有更新 3 的 Visual Studio 2015 Professional,安装了所有更新和补丁。客户端应用程序使用最新的“IBM MobileFirst Platform SDK for Windows 8 Universal and Windows 10 Universal 平台”版本 8.0.2017012514。在我的网络中的另一台机器上,我拥有带有 Java 适配器的 MobileFirst Platform Server。

当应用程序在线并且可以访问 MobileFirst Platform 8.0 服务器时,应用程序运行良好。

如果客户端失去其网络连接(例如 WLAN 无法访问或 MFP 服务器离线),则所有对服务器的请求都会无限期挂起。请参阅以下示例 C# 代码:

    public async Task CallMethodMfp8()
    
        Value = "Start MobileFirst Method Call " + DateTime.Now + "\n" + Value;
        StringBuilder uriBuilder = new StringBuilder().Append("/adapters")
            .Append("/MaximoAdapter")
            .Append("/admin")
            .Append("/heartbeat");
        WorklightResourceRequest rr = _client.ResourceRequest(new 
                   Uri(uriBuilder.ToString(), UriKind.Relative), "GET", "");
        rr.Timeout = 500;

        WorklightResponse resp = await rr.Send();

        if (!resp.Success)
        
            Value = "NOT SUCCESSFULL " + resp.Message + "\n" + Value;
        
        else
        
            Value = "Request OK" + resp.ResponseText + "\n" + Value;
        
        Value = "Method Call Finished " + DateTime.Now + "\n" + Value;
    

如果设备离线,对 rr.Send() 的调用不会返回。 Timeout 参数似乎也没有效果(根据文档,这应该是以毫秒为单位的超时)。

此行为会对客户端应用程序的可用性产生负面影响。

通过阅读文档,我希望调用在配置的超时后返回,并且 resp.Success 字段为 false。

我假设对 WorklightResourceRequest.Send() 的调用不应该在离线时挂起,这是 MobileFirst Platform 库中的一个错误。

是否有解决方法,或者我是否错误地使用了该库?

【问题讨论】:

Windows UWP 应用程序的默认超时通常为 90 秒。您的应用是否在 90 秒内没有显示任何响应? 不,该应用程序只是永远挂起(我有几个小时等待)。即使网络返回,调用也不会继续。 我们能够重新创建这个问题,这个问题将在我们的下一个版本中修复。谢谢你.. 你有什么猜测,下一个版本什么时候准备好?而且我知道我不需要告诉您这一点,但是有很多不同的原因导致客户端可能脱机或无法连接 MobileFirst Server。我相信我的客户会找到它们并进行测试... 请记住,在 iFix 准备好发布之前,您始终可以打开 PMR 以将修复交付给您 【参考方案1】:

问题已修复,修复将在下一个 IFix 中发布。

【讨论】:

以上是关于如果设备离线,MobileFirst 8.0 C# WorklightResourceRequest.Send() 将挂起的主要内容,如果未能解决你的问题,请参考以下文章

Mobilefirst 8.0 推送通知

Mobilefirst 8.0 Java 适配器 SSL

IBM MobileFirst 8.0 Neon 插件

下载更新后 MobileFirst 8.0 直接更新失败

MobileFirst 8.0:一个应用程序的多个适配器

IBM MobileFirst 8.0 启动问题