2013-10-11 50 views
0

我正在开发一个Web项目。我想存储我的数据(来自WCF服务)。那么当请求来自客户端时,我想检查数据库值是否被更改。我正在通过WCF方法进行此项检查。当缓存数据中的时间字段不等于来自WCF方法的时间值时,代码应该调用WCF方法从数据库中获取新数据。新数据将存储在缓存中,并显示在页面上。存储在缓存中的数据始终为空

Noooow ...:/我运行项目显示我的xxx页面,然后显示另一个页面,然后重新显示我的xxx页面,那是什么!我的数据(存储在缓存中)绝对是真的,非常空...代码在这里:我会很高兴听到你的完美建议的人。为什么它应该是空的,我如何从缓存中检索它。第一个方法是在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

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

0

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

还有如何存储缓存中的数据?

+0

hi Ahmed, Session session = DBUtil.GetSession(); 行完全关于DevExpress XPO(一个ORM库)的特性。真的,我不认为它是一个有问题的事情。 (“MeasurementSystemPage”,active_page,null,DateTime.Now.AddDays(7),TimeSpan.Zero,CacheItemPriority.NotRemovable,null);行正在写入数据缓存 –

+0

我有添加web.config,你问 –

+0

谢谢。我的坏 - 我没有看到你的原始代码中的滚动条,所以我可以更深入地了解代码:)你尝试过使用Session而不是Cache吗?看看这个缓存参数。人们有时会得到绝对和滑动过期:http://msdn.microsoft.com/en-us/library/cc491414.aspx –