Я уже некоторое время чесал голову этим. Я создаю приложение для Android в Xamarin, и у меня есть POST-запрос на вход, который в основном работает, но иногда получает эту ошибку. Я уведомляю пользователя и приказываю ему попробовать еще раз, но я все еще получаю ошибку слишком часто и хочу ее исправить, чтобы приложение обеспечивало более плавную работу.
Вот трассировка стека, в которую я вошел в App Center:
LoginProvider+d__1.MoveNext () C:\source\repos{MyApp}{MyApp}{MyApp}\Services\LoginProvider.cs:35
java.io.IOException: unexpected end of stream on Connection{testclarity.i-menzies.com:443, proxy=DIRECT@ hostAddress=62.244.173.166 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1} (recycle count=0)
com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:210)
com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:905)
com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:789)
com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:443)
com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388)
com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:501)
com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:25)
Caused by: java.io.EOFException: \n not found: size=0 content=...
com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:200)
com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191)
Я использую .NETStandard 2.0 с Xamarin Forms 3.2.0.871581.
Я обыскал большую часть Google и обнаружил, что это проблема с различными библиотеками Android, особенно с OkHttp (той же, что упоминалась в моей трассировке стека). Я пытался исследовать источник .NETStandard на Github, чтобы определить возможную причину, но мне очень трудно ориентироваться в проекте, тем более что эта проблема, похоже, специфична для Android. Любой совет по поиску правильного источника был бы идеальным.
Вещи, которые я пробовал на основе предложений из Интернета:
- Установка заголовка моего соединения на закрытое.
- Настройка моей кодировки передачи
на куски.
- Замена реализации Android HttpClient с
Android по умолчанию в свойствах проекта Android.
Они, похоже, являются одними из популярных предложений в Интернете, некоторые из которых работают на людей, а некоторые - нет.
Другим распространенным предложением является установка конфигурации библиотеки OkHttp в OkHTTP.setRetryOnConnectionFailure (true), которая, по-видимому, устраняет проблему для многих людей, как предлагается здесь: https://github.com/square/okhttp/issues/1517#issuecomment-144069139.
Кроме того, похоже, аналогичная ошибка была обнаружена в Xamarin. Android здесь: https://bugzilla.xamarin.com/show_bug.cgi?id=41100. Но это было помечено как исправленное. Я не уверен, отразится ли это на моем проекте Xamarin Forms.
Кто-нибудь знает, как я могу решить эту проблему или как я могу исследовать дальше, помимо того, что я уже пробовал?