Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Завершение работы асинхронного http-сервера 
:(
    Опции темы
Lamya
Дата 22.11.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 22.4.2009

Репутация: нет
Всего: нет



Есть асинхронный http-сервер.

Код

HttpListener listener = new HttpListener();
            listener.Prefixes.Add(...);
            listener.Start();
            for (int i = 0; i < 20; i++)
            {
                listener.BeginGetContext(new AsyncCallback(GetContextCallback), listener);
            }
            Console.ReadKey();
            lock (new object())
            {
                terminated = true;
            }
            listener.Stop();
            listener.Close();


Код

private static void GetContextCallback(IAsyncResult result)
        {
            // Note: The GetContext method blocks while waiting for a request. 
            HttpListener listener = (HttpListener)result.AsyncState;
            if (listener.IsListening)
            {
                HttpListenerContext context = listener.EndGetContext(result);
                HttpListenerRequest request = context.Request;
                Stream body = request.InputStream;
                Encoding encoding = request.ContentEncoding;
                StreamReader reader = new StreamReader(body, encoding);
                string data = reader.ReadToEnd();
                /// обработка 

                    if (!terminated)
                    {
                        listener.BeginGetContext(new AsyncCallback(GetContextCallback), listener);
                    }
            }
        }


Как видно, после обработки принятого пакета снова запускается асинхронный прием. Вопрос в следующем: когда я останавливаю сервер, нужно вызвать Stop для каждого из 20 запущенных BeginGetContext, предварительно сохранив их IAsyncResult в массиве, или достаточно только для главного listener? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0369 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.