首页 > 解决方案 > 更新应用程序后 Web 请求上的 Xamarin iOS HttpRequestException “Connection reset by peer”

问题描述

我们有一个基于 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 请求似乎正在运行。这是唯一在标题中不包含不记名令牌的请求。给定会话中的所有后续请求都会引发此异常。

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

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

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

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

这是其中一个请求调用的示例。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);

标签: c#iosxamarinxamarin.formsdotnet-httpclient

解决方案


推荐阅读