При обычных соединениях Wi-Fi все работает нормально, но когда я ограничиваю скорость сети примерно до 56 кбит/с (GPRS/HSCSD) для тестирования, иногда возникает следующее исключение:
Код: Выделить всё
System.Net.Sockets.SocketException: Socket closed
Поэтому логика загрузки завершается сбоем локально, хотя серверная часть уже обработала запрос.
Вот упрощенная версия моего кода:
Код: Выделить всё
public async Task LocalOrderCompleteSavingRequest(PosSavingOrder requestModel)
{
using var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "");
httpClient.DefaultRequestHeaders.Add("IntegrationID", "");
httpClient.Timeout = TimeSpan.FromSeconds(120); // tried increasing, still fails
try
{
var jsonContent = JsonSerializer.Serialize(requestModel);
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("", content);
if (response.IsSuccessStatusCode)
return true;
return false;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
}
}
API по-прежнему получает и успешно обрабатывает запрос POST.
Я хочу:
- Определить, успешно ли сервер обработал запрос (даже
если клиент не получил полный ответ). - Избегайте повторных загрузок, подтверждая успех перед повторной попыткой.
- Изящно обрабатывайте частичные ответы или разрывы соединений.
Подробнее здесь: https://stackoverflow.com/questions/797 ... er-success
Мобильная версия