Кеширование не работает с IIS? - PullRequest
0 голосов
/ 20 июля 2009

All

У меня есть 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;</p> <pre><code> 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) в Demographics.ascx.cs: 23 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Объект o, Объект 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 (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) + 1061

Есть мысли?

Ответы [ 2 ]

1 голос
/ 20 июля 2009
pcs.values["txtName"]

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

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

0 голосов
/ 20 июля 2009

Если вы используете HttpContext.Cache вместо HttpRuntime.Cache?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...