ASP.NET HttpHandler и частота попаданий - PullRequest
1 голос
/ 11 января 2012

Мне удалось настроить некоторые элементы управления ASP.NET Image для рендеринга изображений из базы данных с помощью HttpHandler.

// Notice the ImageHandler.ashx
<asp:Image ID="imgSrvcGrp" runat="server" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "ServiceGroupID", "~/ImageHandler.ashx?id={0}") %>' />

. Он прекрасно работает и был удивительно прост в настройке.Мой вопрос следует ...

Я заметил, что HttpHandler (ImageHandler.ashx) попадает в определенные моменты, когда я этого не ожидаю.Например, у меня есть точка останова на событии Page_Load страницы, которая содержит теги Image, использующие HttpHandler и другую точку останова в самом обработчике, и я обнаружил, что даже при отсутствии обратной передачи (т. Е.Page_Load точка останова не достигнута) обработчик иногда получает удар (т. Е. Точка останова в обработчике получает удар).

Как ни странно, я обнаружил, что это происходит, когда я закрываю диалоговое окно jQuery на странице.У меня есть всплывающее диалоговое окно jQuery на странице, и я обнаружил, что когда я закрываю всплывающее окно jQuery (нажимая на X), обработчик изображения запускается для каждого изображения на странице, которая его использует, и все же никакой обратной передачи не происходит.

Единственная другая деталь, которую я могу добавить, это то, что моя веб-страница использует RadTabStrip от Telerik, и вполне возможно, что она как-то влияет на этот вопрос.

Я понимаю, что мое объяснениебыло довольно скучным, поэтому, чтобы быть более лаконичным с моим вопросом: Почему мой обработчик изображений получает так часто, даже если не происходит обратной передачи?

1 Ответ

1 голос
/ 11 января 2012

Поскольку загрузка ресурса страницы и публикация формы - это разные действия.

Не думайте об этом с точки зрения ASP.NET с обработчиками обратной передачи и Page_Load и так далее.Подумайте об этом с точки зрения фактического HTML в браузере.«Обратная передача» - это не что иное, как форма, размещаемая на странице.Если вы ничего не делаете для запуска публикации формы, страница не будет отправляться обратно.

Однако страница попадает на сервер, когда запрашивает другие ресурсы.CSS-файлы, файлы JavaScript, изображения и т. Д.Ресурсы, на которые ссылается HTML, которые страница должна загрузить.Поэтому, когда страница загружается, она не просто попадает на сервер один раз.Он попадает на сервер, чтобы получить HTML-документ (именно здесь запускается Page_Load для страницы), и в то время как он отображает этот HTML, он снова и снова обращается к серверу для каждого ресурса, на который есть ссылка в документе HTML.

Еслистраница скрывает / показывает ресурсы с динамическими настройками стиля, поэтому не нужно перезагружать эти ресурсы каждый раз, когда они их показывают.Однако, если страница делает что-то, что заставляет ее повторно визуализировать загруженный контент (и этот контент не кэшируется в браузере), то она попадет на сервер.Это может быть причиной того, что обработчик ASHX попадет в цель.

Одним из предложений для вас было бы загрузить страницу с помощью некоторых инструментов отладки (FireBug в Firefox по-прежнему остается моим личным выбором) и следить за фактическим трафиком.заходить и заходить на страницу (вкладка «Сеть» в FireBug, возможно, что-то похожее в других инструментах.) Это может помочь вам точно определить, что запрашивается и, возможно, что запрашивает его.Например, если по какой-либо причине этот RadTabStrip удаляет элементы img со страницы и повторно добавляет их, он будет каждый раз запрашивать изображение с сервера.

...