Xamarin iOS HttpRequestException更新应用程序后,Web请求上的“对等连接重置”

时间:2018-08-15 13:45:39

标签: c# ios xamarin xamarin.forms dotnet-httpclient

我们有一个基于Apple Enterprise Developer的自托管iOS应用程序,该应用程序大约在六周前发布。我们正在开发该应用程序的下一个版本,当人们更新到新的测试版本时,我们会看到问题。每当通过包含承载令牌的HTTPS进行调用时,都会引发HttpRequestException并显示“对等连接重置”消息。 MS App Center错误报告中显示的调用堆栈提供的信息很少。

Main thread System.Net.Sockets Socket.Receive (System.Byte[] buffer, System.Int32 offset, System.Int32 size, System.Net.Sockets.SocketFlags socketFlags) System.Net.Sockets NetworkStream.Read (System.Byte[] buffer, System.Int32 offset, System.Int32 size)

用于登录用户的初始Web请求似乎正在运行。这是唯一在标题中不包含承载令牌的请求。给定会话中的所有后续请求都将引发此异常。

我们发现用户可以通过在安装新版本之前从手机中删除该应用程序的当前发行版本来解决该错误。完成后,该错误将不再出现在新版本中。我们还收到了一些报告,报告用户即使没有升级应用程序的版本也会遇到错误。一段时间未使用该应用程序的用户似乎会遇到这种情况。

我们尝试通过在设备上的已发布版本之上执行安装新测试版本的相同步骤来重现该错误,并且工作正常。

我们的项目经理在她的个人设备上遇到了问题。她一直在测试新版本而不进行升级,以查看是否不再抛出异常。我们尝试了以下方法来解决问题,但未成功:

  • 删除了以前的Web请求结果和不记名令牌的所有本地缓存​​,从而始终强制执行实时请求
  • 从HttpClient的iOS NSUrlSession实现切换回默认的Xamarin托管实现
  • 验证HttpClient基本URI和单个请求URI是预期的
  • 在进行调用时,验证是否已将承载令牌值分配给HttpClient授权默认标头

有人发生过这种情况吗,或者可以阐明引发此异常的可能原因?非常感谢您提供的任何帮助。它使我们发疯!

这是其中一个请求调用的示例。 HttpClient属性是一个静态实例,用于应用程序的生命周期。 SaveContext属性是一个布尔值,用于启用/禁用上下文保存,以测试在后台线程中执行请求而不保存上下文。这两个选项都已尝试过,并且对发生的错误没有影响。 HttpClient BaseAddress属性具有分配给它的API uri根。传递给GetAsync的uri是相对uri。

HttpResponseMessage serverResponse = await HttpClient.GetAsync(uri).ConfigureAwait(SaveContext);

更多设置:

var handler = new HttpClientHandler {
    AllowAutoRedirect = true, AutomaticDecompression = 
    DecompressionMethods.Deflate | DecompressionMethods.GZip, 
    MaxAutomaticRedirections = 20
};

var httpClient = new HttpClient(handler);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(JsonSerializerHelper.JsonEncoding));
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

0 个答案:

没有答案