Android / Xamarin.Android将网络从wifi切换到3g时休息客户端超时

时间:2016-02-04 14:10:18

标签: android xamarin mono network-programming xamarin.forms

我的团队正在使用Xamarin表单(主要针对手机)来处理依赖于网络连接的项目。我们遇到了一个关于android的问题,它阻碍了我们应用程序的一个主要特性。当我们在从wifi切换到蜂窝后尝试访问数据服务时,我们经常会在FIRST数据检索尝试中收到超时错误。后续尝试工作。 此问题不会发生(从移动设备到wifi)This bug describes our problem, but says it's for iOS, and interestingly enough we dont get this issue on iOS

要复制的步骤列表如下:

  1. 使用wifi
  2. 在手机上启动应用程序
  3. 尝试检索数据。这应该会成功 检索
  4. 使用快速设置栏(从屏幕顶部向下拉),转动 wifi关闭,以便您了解手机数据
  5. 尝试再次检索数据(尝试等待短或长 你喜欢.... 1秒,10秒,2分钟产生相同的效果 结果)。这应该导致失败(在servicestack客户端上) 它导致超时,在httpclients上导致一个 OperationCancelledException,在它下面都是超时)
  6. 尝试检索数据并收到故障后 第一次尝试,再试一次,你应该成功。
  7. 我们更喜欢在我们的应用程序中使用ServiceStack客户端,因为它隐藏了许多复杂的代码。通过对问题的研究,大量信息指向我们使用名为ModernHttpClient的库(此错误描述了我们的确切步骤但报告与iOS相关),但这并不能解决我们的问题。

    此处还可以找到有关这些步骤的视频截屏视频要观看此视频的示例截屏视频,请观看此视频https://drive.google.com/open?id=0B9ulyVqWgbL3aEUzVFJEYTF2dEk。 可以在https://drive.google.com/open?id=0B9ulyVqWgbL3UHZmX2x6NDBEY00

    找到上述屏幕演示中使用的简单示例应用程序

    如果这是一个Android操作系统问题,单声道问题或代码问题......或者其中几个的组合,你们是否知道?它有解决方法吗?

    编辑:另一种尝试的方案很有趣。

    1. 使用wifi
    2. 在手机上启动应用程序
    3. 尝试检索数据。这应该会成功 检索
    4. 使用快速设置栏(从屏幕顶部向下拉),转动 wifi关闭,以便您了解手机数据
    5. 进入飞行模式
    6. 退出飞行模式
    7. 尝试再次检索数据。这将导致成功

1 个答案:

答案 0 :(得分:0)

问题是客户端在更改网络后重新使用连接,当然连接无效。

您可以添加"内容:已关闭"通过将HADPWebRequest的KeepAlive设置为false,但是无法从PCL程序集中完成。

因此,您必须创建从PCL到ios / android项目的依赖关系,将请求发送到本机端,将KeepAlive设置为false并返回,这样连接将关闭,当您创建新连接时,它将在新的网络上。