Я пытаюсь разработать сложное кэширование для моего приложения ASP.net. Однако из-за отсутствия комплексной документации задача превратилась в более сложное назначение, чем предполагалось.Как организовать настраиваемое кэширование в модуле IIS?
Я создал модуль IIS, который подписывается на HttpApplication
и предположим, что выполнить работу. Код ниже:
namespace Cache
{
using System;
using System.IO;
using System.Web;
public class Control : IHttpModule
{
#region Public Methods
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.ResolveRequestCache += onResolveRequestCache;
context.UpdateRequestCache+= onUpdateRequestCache;
}
#endregion Public Methods
#region Private Methods
private void onResolveRequestCache(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
// Get cached response body and fire response
}
private void onUpdateRequestCache(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
// Put response body to cache
}
#endregion Private Methods
}
}
Однако я столкнулся со следующими препятствиями: Не ясно, как сломать трубопровод выполнения, если объект был найден в кэше. Оба метода, которые я обнаружил: HttpApplication.Context.Response.End()
и HttpApplication.Context.Response.Flush()
имеют свои недостатки, такие как необходимость вручную устанавливать все заголовки или запускать все последующие события в конвейере выполнения, даже если они не нужны.
Есть ли рекомендации по заполнению HttpApplication.Context.Response
тела с информацией, полученной от поставщика кеш-памяти, и как установить правильные заголовки (более или менее автоматически, возможно, кешировать их выборочно?) И как правильно пропустить шаги конвейера выполнения для достижения наилучшего применения представление.
Его не очень понятно, что именно то, что вы хотите достичь путем обработки этих событий? Не могли бы вы рассказать подробнее? –
@PankajKapare, я хочу сохранить свой ответ на кеш Redis и получить его потом. – shytikov
Похоже, вы хотите подключить кэш-память пользовательского вывода. Если это случай, то вот ссылки, которые могут вам помочь. http://weblogs.asp.net/gunnarpeipman/asp-net-4-0-writing-custom-output-cache-providers и https://www.nuget.org/packages/AspNet.Caching.Output/ –