Асинхронное соединение не работает после первого сбоя

Я имею дело с довольно раздражающей проблемой, и я не мог найти никакого решения для этого.

Я звоню в 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-го сбоя сервер никогда не будет отправлять ответы или получать потоковые сообщения, пока я не перезапущу приложение. Как будто он полностью заблокирован.

Кто-нибудь когда-либо имел такое поведение?

0 ответов

Другие вопросы по тегам