Кэширование страницы .NET, но все еще получает строку запроса - PullRequest
3 голосов
/ 05 декабря 2011

Можно ли кэшировать рендеринг страницы на веб-сервере iis, но при этом получать и записывать значения строки запроса (не влияющие на вывод) в базу данных? Чтобы рендеринг страницы не ожидал выполнения отключения базы данных, чтобы обслуживать страницу? Если возможно, как я могу реализовать?

Например, мы отслеживаем различные аффилированные и поисковые маркетинговые данные через строки запроса, а в коде главной страницы мы записываем данные данной строки запроса в базу данных. Вывод страницы для пользователя вообще не меняется (однако мы можем установить cookie на основе параметра qs).

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

1 Ответ

1 голос
/ 06 декабря 2011

Да, в общем, хотя это может зависеть от того, как человек обрабатывает кэширование.

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

Некоторые варианты сделать операцию неблокирующей:

  • , если вы фактически пишете в веб-службу, есть недооцененное украшение [OperationContract(IsOneWay = true)].Говорит сгенерированному прокси запустить и забыть вызов, не будет ждать ответа.
  • Другой вариант - использовать асинхронные биты ADO.NET, особенно BeginExecuteNonQuery .Если вы не обрабатываете обратный вызов, это должно просто выполняться из вашего потока.
  • Вы всегда можете просто создать поток и разобраться с ним неблокирующим образом самостоятельно.Просто будьте очень осторожны с обработкой ошибок в этом потоке - необработанные исключения вытеснят домен приложения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...