Проверьте соединение активно в ASP.NET - PullRequest
1 голос
/ 17 апреля 2009

Я работаю над Comet приложением, написанным на ASP.NET. Существует массив активных контекстов соединения ( HttpContext ). И есть поток, который должен периодически перебирать коллекцию и проверять их состояние. Таким образом, архитектура приложения не является поток-на-запрос.

Как лучше всего убедиться, что соединение активно (не закрыто удаленным хостом)?

Я нашел это:

context.Response.Write(' ');
context.Response.Flush();

if (!context.Response.IsClientConnected)
{
    // ...
}

Но это не очень хорошее решение, потому что для его обработки требуется время потока (Flush () блокирует операцию). Мне нужно решение, которое работает очень быстро для многих одновременных соединений и не использует операции блокировки.

Может быть, есть какая-то функциональность IIS или ASP.NET, которая позволяет отслеживать соединения таким образом?

1 Ответ

2 голосов
/ 18 апреля 2009

Краткий ответ ... нет. ASP.NET знает, как вернуть false для IsClientConnected, если пользователь выполняет другой вызов на сервер или ранее вызывался Response.Close По моему опыту, пользователь вполне может закрыть соединение и при этом IsClientConnected возвращает true. Подумайте о происходящем HTTP-сообщении, и вы поймете, почему.

Чего вы пытаетесь достичь?

...