C # httpwebrequest getResponse () зависает и зависает мою программу
-
13-09-2020 - |
Вопрос
Я пытался использовать httpwebrequest, чтобы использовать отдых, такой как сервис на удаленном сервере и от самого первого выполнения, мой код повесил программу.Затем я попробовал его как приложение консоли, чтобы убедиться, что он не имеет ничего общего с самой программой, но не удачи!
string credentialsJson = @"{""username"":""test"",
""password"":""test""
}";
int tmp = ServicePointManager.DefaultConnectionLimit;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qrua.com/qr/service" + @"/auth/login");
request.Method = "POST";
request.KeepAlive = true;
request.Timeout = 50000 ;
request.CookieContainer = new CookieContainer();
request.ContentType = "application/json";
try
{
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(credentialsJson);
}
catch (Exception e)
{
Console.WriteLine("EXCEPTION:" + e.Message);
}
//WebResponse response = request.GetResponse();
try
{
using (WebResponse response = (HttpWebResponse)request.GetResponse())
{
Console.WriteLine("request:\n" + request.ToString() + "\nresponse:\n" + response.ContentLength);
response.Close();
}
}
catch (Exception e)
{
Console.WriteLine("EXCEPTION: in sending http request:" + " \nError message:" + e.Message);
}
.
попробовал несколько вещей с разных форумов, но он не помогает.Даже простое приложение консоли с вышеуказанным кодом висит консоль на неопределенный срок!Любая помощь была бы здоровой ..
Спасибо
Решение
Вы никогда не закрываете генеракодицетагкод ... поэтому я подозреваю, что он не промывает.По общему признанию, я ожидаю ошибки с сервера вместо того, чтобы просто повесить, но стоит смотреть.
btw, вам не нужно закрывать ответ и утилизируйте его.Просто утверждение StreamWriter
достаточно.
Другие советы
Там не так много, вы можете сделать, если удаленный сервер не отвечает, кроме определения генеракодицетагкода и завершил исключение, как вы, чтобы сообщить пользователю, что операция не может завершить, потому что удаленный сайт не ответил:
.var request = (HttpWebRequest)WebRequest.Create("https://qrua.com/qr/service/auth/login");
request.Timeout = 5000;
// If the server doesn't respond within 5 seconds you might catch the timeout exception
using (var response = request.GetResponse())
{
}
.
Если вы не хотите заморозить интернет-интерфейс, вы можете использовать Async версию: BegingEnstresponse
Попробуйте указание запроса. Сонтенгентлина.
Прежде чем делать:
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(credentialsJson);
.
попробуйте что-то вроде этого:
using (MemoryStream stream = new MemoryStream())
{
using (var writer = StreamWriter writer = new StreamWriter(stream))
{
writer.Write(credentialsJson);
writer.Close();
}
request.ContentLength = stream.Length;
}
.