Кэшированный, общий серверный контроль в asp.net появляется несколько раз на странице - PullRequest
0 голосов
/ 27 октября 2011

Мой сайт asp.net использует серверные элементы управления для повышения производительности путем кэширования частей страниц.

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

Когда это происходит, оно выглядит одинаково на нескольких компьютерах в нашем офисе - так что это не проблема браузера.

Если мы повторно загрузим файл .ascx для дублирующего элемента управления, это исправит его. Я предполагаю, что каким-то образом серверный кэш элемента управления вышел из строя, и повторная загрузка файла ascx очищает серверный кэш, поэтому его можно заново создать при следующем запросе страницы.

Мои вопросы:

  1. Кто-нибудь еще испытывал это?
  2. Есть ли способ это исправить?

Директивы в верхней части файла .ascx:

<%@ OutputCache Duration="86400" Shared="true" VaryByParam="none" %>
<%@ Control Language="VB" ClassName="Banner_LocalGuides" EnableViewState="false" %>

Элемент управления регистрируется на странице содержимого следующим образом:

<%@ Register TagPrefix="tymControls" TagName="LocalGuides" Src="~/Banner-LocalGuides.ascx" %>

Затем тег используется на странице содержимого следующим образом:

<tymControls:LocalGuides ID="LocalGuides" runat="server" />

Одна вещь, которую я рассмотрел, заключалась в том, что это может быть связано с синхронизацией периода перезапуска пула приложений в IIS по сравнению с атрибутом OutputCache Duration файла ascx, но я могу быть совершенно неправ. Время перезапуска пула приложений в настоящее время составляет 240 минут (14 400 секунд).

Подробнее о настройке нашего сайта:

  • Запуск asp.net 4 в классическом конвейерном режиме.
  • IIS 7
  • Кодировано в vb.net
  • Использование главных страниц, но на .ascx ссылаются из страниц содержимого, а не из главных страниц

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 25 августа 2012

Мы обнаружили, что ответ был в данных, которые отображал элемент управления ascx. Некоторые данные содержали HTML, который портил форматирование страницы.

Мы запустили несколько строковых функций для удаления HTML, и это решило проблему.

Непостоянная природа проблемы была из-за того, что данные постоянно менялись, и когда мы перезагружали файл ascx, он заставлял кэшированный элемент управления извлекать новые данные - если эти новые данные не содержат HTML, который вызывал проблема тогда оказалась исправленной.

Спасибо за ваш вклад всем.

...