Асинхронное соединение не работает после первого сбоя
Я имею дело с довольно раздражающей проблемой, и я не мог найти никакого решения для этого.
Я звоню в WebRequest Connection, работаю под Unity C#;
IAsyncResult startingTheCall = webRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), parameters);
Отправляет вызов на сервер, работающий в Windows; Все работает отлично. Но если сервер не выключен, соединение ждет ответа вечность. Так что решите это, я добавляю таймаут:
ThreadPool.RegisterWaitForSingleObject(startingTheCall.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallbackOfFirstStream), parameters, 10000, true);
Тайм-аут тоже работает нормально; Проблема заключается в том, что если я когда-нибудь запустил тайм-аут (выключив сервер), а затем снова включил сервер, BeginGetRequestStream никогда не достигнет сервера, несмотря ни на что, пока я не перезапущу приложение.
Я подумал, что, возможно, в случае неудачи, я не очищаю соединения должным образом Поэтому я настроил эту процедуру очистки в течение тайм-аута:
ArrayList unbox = (ArrayList)state;
HttpWebRequest request = (HttpWebRequest)unbox[1];
IAsyncResult asynchronousResult = (IAsyncResult)unbox[6];
Stream postStream = request.EndGetRequestStream(asynchronousResult);
postStream.Close();
request.Abort();
Я отменяю запрос, закрываю поток. Тем не менее, после 1-го сбоя сервер никогда не будет отправлять ответы или получать потоковые сообщения, пока я не перезапущу приложение. Как будто он полностью заблокирован.
Кто-нибудь когда-либо имел такое поведение?