存储在缓存中的数据始终为null

时间:2013-10-11 10:37:25

标签: c# asp.net wcf caching null

我正在开展一个网络项目。我想存储我的数据(来自WCFservice)。然后,当请求来自客户端时,我想检查数据库值是否已更改。我正在通过WCF方法进行此检查。当缓存数据中的时间字段不等于来自WCF方法的时间值时,代码应该调用WCF方法从数据库中获取新数据。新数据将存储在缓存中,并显示在页面上。

Noooow ...:/我运行项目显示我的xxx页面,然后显示另一个页面,然后重新显示我的xxx页面,那是什么!我的数据(存储在缓存中)是绝对的,非常非常的......代码在这里:我将非常高兴听到你的完美建议人。为什么它应该为null,我如何从缓存中检索它。第一种方法是在wcf中,第二种方法已经是问题页面的负载

public MeasurementSystemPageWcf GetActiveSystemMeasurementPage(bool RequestOnlyInfo)
{
    Session session = DBUtil.GetSession();
    XPClassInfo MeasurementSystemPageClass = session.GetClassInfo(typeof(MeasurementSystemPage));
    string QCriteria = "ISACTIVE =='true'";
    CriteriaOperator criteria = CriteriaOperator.Parse(QCriteria);
    SortingCollection sortProps = new SortingCollection(null);
    sortProps.Add(new SortProperty("", SortingDirection.Ascending));
    CollectionCriteriaPatcher patcher = new CollectionCriteriaPatcher(false, session.TypesManager);
    ICollection MeasurementSystemPageCollection = session.GetObjects(MeasurementSystemPageClass, criteria, sortProps, 0, patcher, true);
    MeasurementSystemPageWcf RetVal = new MeasurementSystemPageWcf();
    if (MeasurementSystemPageCollection != null && MeasurementSystemPageCollection.Count != 0)
    {
        if (!RequestOnlyInfo)
        {
            foreach (MeasurementSystemPage item in MeasurementSystemPageCollection)
            {
                // sadece bir tane aktif sayfa gelmesi gerektiği varsayılarak kolleksiyondaki ilk sayfa alınacak. break ile sağlanıyor
                RetVal.PAGEHEADER = item.PAGEHEADER;
                RetVal.CONTENT = item.CONTENT;
                RetVal.CREATEDATE = item.CREATEDATE;
                RetVal.EDITDATE = item.EDITDATE;
                break;
            }
        }
        else if (RequestOnlyInfo)
        {
            foreach (MeasurementSystemPage item in MeasurementSystemPageCollection)
            {
                // sadece bir tane aktif sayfa gelmesi gerektiği varsayılarak kolleksiyondaki ilk sayfa alınacak. break ile sağlanıyor
                RetVal.EDITDATE = item.EDITDATE;
                break;
            }
        }
    }
    else
    {
        RetVal.ER.HasError = true;
        RetVal.ER.ErrorMethod = "MeasurementSystemPageWcf GetActiveSetMeasurementPage()";
        RetVal.ER.ErrorMessage = "Henüz İçerik Girilmemiş";
    }
    return RetVal;
}

protected void Page_Load(object sender, EventArgs e)
{
    XSensServiceClient client = new XSensServiceClient();
    MeasurementSystemPageWcf page_in_cache = (MeasurementSystemPageWcf)Cache["MeasurementSystemPage"];
    if (page_in_cache == null)
    {
        MeasurementSystemPageWcf active_page = client.GetActiveSystemMeasurementPage(false);
        if (active_page.ER.HasError)
        {
            lbl_Body.Text = active_page.ER.ErrorMessage;
            Page.Title = active_page.ER.ErrorMessage;
        }
        else
        {
            Cache.Insert("MeasurementSystemPage", active_page, null, DateTime.Now.AddDays(7), TimeSpan.Zero, CacheItemPriority.NotRemovable, null);
            //Cache["MeasurementSystemPage"] = active_page;
            Page.Title = active_page.PAGEHEADER;
            lbl_Body.Text = active_page.CONTENT;
        }
    }
    else
    {
        MeasurementSystemPageWcf active_page_from_wcf = client.GetActiveSystemMeasurementPage(true); // buraya sadece edit zamanını çeken bir method yazılacak, her karşılaştırmada bütün sayfa verisini çekmemek için.
        MeasurementSystemPageWcf active_page_from_cache = (MeasurementSystemPageWcf)Cache["MeasurementSystemPage"];
        if (active_page_from_cache.EDITDATE < active_page_from_wcf.EDITDATE)
        {
            MeasurementSystemPageWcf updated_page = client.GetActiveSystemMeasurementPage(false);
            Cache.Insert("MeasurementSystemPage", updated_page, null, DateTime.Now.AddDays(7), TimeSpan.Zero, CacheItemPriority.NotRemovable, null);
            Page.Title = updated_page.PAGEHEADER;
            lbl_Body.Text = updated_page.CONTENT;
        }
        else
        {
            Page.Title = active_page_from_cache.PAGEHEADER;
            lbl_Body.Text = active_page_from_cache.CONTENT;
        }
    }

web.config如下:

<?xml version="1.0"?>
<configuration>

  <configSections>
    <sectionGroup name="devExpress">
      <section name="themes" type="DevExpress.Web.ASPxClasses.ThemesConfigurationSection, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false"/>
      <section name="compression" type="DevExpress.Web.ASPxClasses.CompressionConfigurationSection, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false"/>
      <section name="settings" type="DevExpress.Web.ASPxClasses.SettingsConfigurationSection, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false"/>
      <section name="errors" type="DevExpress.Web.ASPxClasses.ErrorsConfigurationSection, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false"/>
    </sectionGroup>
  </configSections>
  <system.web>

    <!--caching nodu sonradan eklendi-->
    <caching>
      <cache disableExpiration="true"/>
    </caching>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=B88D1754D700E49A"/>
        <add assembly="DevExpress.Data.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=B88D1754D700E49A"/>
        <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="DevExpress.RichEdit.v13.1.Core, Version=13.1.6.0, Culture=neutral, PublicKeyToken=B88D1754D700E49A"/>
      </assemblies>
    </compilation>
    <httpModules>
      <add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule"/>
    </httpModules>
    <httpHandlers>
      <add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="DX.ashx" validate="false"/>
    </httpHandlers>
    <pages>
      <controls>
        <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit"/>
      </controls>
    </pages>
  </system.web>
  <system.webServer>
    <modules>
      <add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule"/>
    </modules>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="DX.ashx" name="ASPxHttpHandlerModule" preCondition="integratedMode"/>
    </handlers>
  </system.webServer>
  <devExpress>
    <themes enableThemesAssembly="true" styleSheetTheme="" theme="" customThemeAssemblies=""/>
    <compression enableHtmlCompression="false" enableCallbackCompression="true" enableResourceCompression="true" enableResourceMerging="true"/>
    <settings rightToLeft="false" doctypeMode="Xhtml"/>
    <errors callbackErrorRedirectUrl=""/>
  </devExpress>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IXSensService"  allowCookies="true" maxReceivedMessageSize="20000000" maxBufferPoolSize="20000000">
          <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://127.0.0.1/XSensWCFService/XSENSWCFService.XSensService.svc"
          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IXSensService"
          contract="XSensService.IXSensService" name="WSHttpBinding_IXSensService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

1 个答案:

答案 0 :(得分:0)

DbUtil.GetSession()是什么样的?问题可能就在那里。 您没有指定是否使用ASP.NET中的会话状态来保存会话,还应该发布web.config会话状态设置以查看它是否已正确配置并启用

你如何在缓存中存储数据?