В моем проекте приложения Xamarin. iOS у меня есть критическая для меня ошибка. Когда я сначала отправляю запрос по http, я получаю исключение отмены, и только во второй раз я получаю результат успеха. В журналах доступа к серверу я вижу два успешных ответа, и мой скрипт PHP тоже запускается дважды, и в моей базе MySQL есть 2 запроса INSERT из php.
. попробуйте: - изменить сервер, - обновить мою ОС Ma c (до 10.15.4), - мою iPhone (с 13.1. * до 13.4, кстати, в базе Mysql я вижу пользователей с такой же проблемой с более старыми версиями iOS) - обновить Xcode (11.4) - обновить Visual Studio (8.5) и Xamarin - обновить систему. Net .Http (4.3.4) - попытаться установить CancellationToken и newClient.Timeout, но это не так. что-то изменить
В коде у меня есть дополнительная секунда, попробуйте подключиться, если он отменит. Если я удалю дополнительное соединение, у меня будет только исключение отмены.
Код:
private async Task<string> PostAndHandleHttpRequestAsync(Dictionary<string, string> content)
{
var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(100000 );
CancellationToken token = cancellationTokenSource.Token;
var newClient = new HttpClient();
//client.Timeout = new TimeSpan(0, 1, 0);
newClient.Timeout = TimeSpan.FromSeconds(200); // this is double the default
var contentSerialize = JsonConvert.SerializeObject(content);
try
{
var postAsyncResult = await newClient.PostAsync(GlobalSettings.urlToPHP, new StringContent(contentSerialize), token);
var responseBody = await postAsyncResult.Content.ReadAsStringAsync();
return responseBody;
}
catch (OperationCanceledException c)
{
//additional second try
if (cancellationCounter == 0 )
{
Console.WriteLine("second");
cancellationCounter = 1;
var postAsyncResult = await newClient.PostAsync(GlobalSettings.urlToPHP, new StringContent(contentSerialize), token);
Console.WriteLine("secondrio " + postAsyncResult.ToString());
var responseBody = await postAsyncResult.Content.ReadAsStringAsync();
return responseBody;
}
else
{
cancellationCounter = 0;
return "Cancel";
}
Console.WriteLine("cancel exception " + c.ToString() + c.Message);
return "Cancel";
}
catch (Exception e)
{
Console.WriteLine("Error PostAndHandleHttpRequestAsync " + e.Message);
return "Error";
}
}
Пожалуйста, помогите? Вход на сервер выглядит так:
[31/Mar/2020:14:48:21 +0300] "POST /CPMP-PROD4-10.php HTTP/1.0" 200 116 "-" "CocktailParty/4 CFNetwork/1125.2 Darwin/19.4.0"
[31/Mar/2020:14:48:21 +0300] "POST /CPMP-PROD4-10.php HTTP/1.0" 200 116 "-" "CocktailParty/4 CFNetwork/1125.2 Darwin/19.4.0"
[31/Mar/2020:14:48:21 +0300] "POST /CPMP-PROD4-10.php HTTP/2.0" 200 116 "-" "CocktailParty/4 CFNetwork/1125.2 Darwin/19.4.0"
[31/Mar/2020:14:48:21 +0300] "POST /CPMP-PROD4-10.php HTTP/2.0" 200 116 "-" "CocktailParty/4 CFNetwork/1125.2 Darwin/19.4.0"