2009-07-20 3 views
0

Все,Кэширование не работает с IIS?

У меня есть ASP.NET (C#), который функционирует как ожидалось со встроенным отладчиком/веб-сервером. Однако, когда я перехожу к серверу IIS, кажется, что объект кэша не задан. Может ли кто-нибудь помочь?

Вот класс, который устанавливает кеш и последующий файл cookie.

class globals 
    { 
     public NameValueCollection values; 
     private static string m_visitNumber =""; 

    public globals() 
    { 
     string userName = HttpContext.Current.Request.Cookies["PatientDischargeSummary"].Value; 
     values = HttpContext.Current.Cache[userName] as NameValueCollection; 
    } 

    public globals(NameValueCollection form) 
    { 
     // Copy the form values. 
     values = new NameValueCollection(); 
     values.Add("txtCR", form["txtCR"]); 
     values.Add("txtName", form["txtName"]); 



     // Add the values to the cache. 
     //HttpContext.Current.Cache.Insert(form["txtUserName"], values, null, System.Web.Caching.Cache.NoSlidingExpiration, TimeSpan.FromMinutes(5)); 
     HttpRuntime.Cache.Insert(form["txtUserName"], values, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration); 
     //HttpContext.Current.Cache.Insert(form["txtUserName"], values, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration); 

     // Add the username to the cookies. 
     HttpCookie cookie = new HttpCookie("PatientDischargeSummary", form["txtUserName"]); 
     cookie.Expires = DateTime.Now.AddMinutes(30); 
     cookie.HttpOnly = true; 
     HttpContext.Current.Response.Cookies.Add(cookie); 
    } 

Пример меня с помощью кэша:

globals pcs;

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 

      pcs = new globals(); 


      lblActiveEditor.Text = pcs.values["txtName"]; 


     } 

    } 

Сформировать следующее сообщение об ошибке под IIS:

[NullReferenceException: Ссылка на объект не указывает на экземпляр объект.] navigationtest.Demographics.Page_Load (отправитель объекта, EventArgs e) в демографии .ascx.cs: 23 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +15 System.Web.Util.CalliEventHandlerDelegateProxy.Callback (отправитель объекта, EventArgs e) +34 System.Web.UI.Control.OnLoad (EventArgs e) +99 System.Web.UI.Control.LoadRecursive() +47 System.Web.UI.Control.LoadRecursive() +131 System.Web.UI .Control.LoadRecursive() +131 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061

Любые мысли?

ответ

0

Должен ли использоваться HttpContext.Cache вместо HttpRuntime.Cache?

+0

Да - это то, что у меня было изначально, но я столкнулся с той же проблемой. – 2009-07-20 14:16:54

+0

первый - это ярлык для второго. – user134706

1
pcs.values["txtName"] 

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

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

+0

Я заполняю кеш при запуске: if (Request["txtUserName"] != null) { userName = Request["txtUserName"]; // Populate the cache with the initial form values from PCS. pcs = new globals(Request.Form); } else { userName = Request.Cookies["PatientDischargeSummary"].Value; pcs = new globals(); Response.Write(userName); } Но почему это работает в режиме отладки, а не в IIS? – 2009-07-20 14:18:44

+0

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

Смежные вопросы