ASP.NET - отслеживание отключений клиентов при длительных HTTP-запросах - PullRequest
1 голос
/ 09 сентября 2010

У меня длинный HTTP-запрос с использованием ASP.NET 4, MVC 2 и AsyncController.Если пользователь закрывает свой браузер и прерывает HTTP-соединение без выполнения запроса, я хотел бы узнать об этом и полностью очистить его после.Если я этого не сделаю, то открытые и неполные запросы просто сидят там, и в итоге IIS прекращает принимать новые запросы.

Вы можете смоделировать мой длительный HTTP-запрос, создав обычное приложение ASP.NET со страницей, имеющей Thread.Sleep.Даже если вы закроете браузер, запрос будет продолжен, как если бы он этого не делал.

Существует свойство Response.IsClientConnected, которое переключается в false, если клиент отключается, и я могу опрашивать его для достиженияжелаемый эффект, но он не очень чистый, и я хотел бы избежать опроса.Есть ли способ получить уведомление, когда это происходит, вместо того, чтобы опрашивать это свойство?

Спасибо

1 Ответ

0 голосов
/ 13 октября 2010

Стандартный способ сделать это - зарегистрировать обратный вызов с событием ClientDisconnected. К сожалению, в ASP.NET такого события нет, и Response.IsClientConnected не является надежным. Может быть, этот хак поможет:

Создайте страницу и заставьте клиентов запрашивать эту страницу с помощью очень маленького изображения (например, 1x1 пиксель) или небольшого кадра и отправлять запрос от клиентов через определенные промежутки времени (используйте таймеры Javascript). Запрос должен определить, кто является клиентом (используйте clientId в качестве параметра, передаваемого на страницу). Если от клиента нет сигнала, он может рассматриваться как отключенный вашим приложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...