Ich habe folgendes Beispiel in des Hilfe gefunden.
Benachrichtigen einer Anwendung beim Entfernen eines Elements aus dem Cache
http://msdn2.microsoft.com/de-de/library/7kxdx246(VS.80).aspx
Leider funktioniert es nicht wie gewollt.
Beim ersten aufrufen der Seite landet alles wie gewünscht im Cache.
Auch der Callback wird nach der Minute ausgeführt, doch beim aufrufen der
Methode CacheReport()
ist der HttpContext.Current immer null!
Und ich bekomme eine Exception.{"Der Objektverweis wurde nicht auf eine
Objektinstanz festgelegt."}
Wie kann ich das Problem lösen?
Bernhard
protected void Page_Load(object sender, EventArgs e)
{
this.Label1.Text = ReportManager.GetReport();
}
using System;
using System.Web;
using System.Web.Caching;
public static class ReportManager
{
private static bool _reportRemovedFromCache = false;
static ReportManager()
{ }
public static String GetReport()
{
lock (typeof(ReportManager))
{
if (HttpContext.Current.Cache["MyReport"] != null)
return (string)HttpRuntime.Cache["MyReport"];
else
{
CacheReport();
return (string)HttpRuntime.Cache["MyReport"];
}
}
}
public static void CacheReport()
{
lock (typeof(ReportManager))
{
HttpContext.Current.Cache.Add("MyReport",
CreateReport(), null, DateTime.MaxValue,
new TimeSpan(0, 1, 0),
System.Web.Caching.CacheItemPriority.Default,
ReportRemovedCallback);
}
}
private static string CreateReport()
{
System.Text.StringBuilder myReport =
new System.Text.StringBuilder();
myReport.Append("Sales Report<br />");
myReport.Append("2005 Q2 Figures<br />");
myReport.Append("Sales NE Region - $2 million<br />");
myReport.Append("Sales NW Region - $4.5 million<br />");
myReport.Append("Report Generated: " + DateTime.Now.ToString()
+ "<br />");
myReport.Append("Report Removed From Cache: " +
_reportRemovedFromCache.ToString());
return myReport.ToString();
}
public static void ReportRemovedCallback(String key, object value,
CacheItemRemovedReason removedReason)
{
_reportRemovedFromCache = true;
CacheReport();
}
}
lg,
Marco
> Ich habe folgendes Beispiel in des Hilfe gefunden.
> Benachrichtigen einer Anwendung beim Entfernen eines Elements aus dem
> Cache
> http://msdn2.microsoft.com/de-de/library/7kxdx246(VS.80).aspx
> Leider funktioniert es nicht wie gewollt.
>
> Beim ersten aufrufen der Seite landet alles wie gewünscht im Cache.
>
> Auch der Callback wird nach der Minute ausgeführt, doch beim aufrufen der
> Methode CacheReport()
> ist der HttpContext.Current immer null!
> Und ich bekomme eine Exception.{"Der Objektverweis wurde nicht auf eine
> Objektinstanz festgelegt."}
>
> Wie kann ich das Problem lösen?
HttpContext.Current ist ist nur während eines Requests gültig. Der CallBack
wird aber zu einem davon unabhängigen Zeitpunkt ausgeführt.
Auf den Cache kannst Du aber trotzdem auch jederzeit unabhängig vom Context
zugreifen:
System.Web.Hosting.HostingEnvironment.Cache
Viele Grüße
Harald M. Genauck
ABOUT Visual Basic http://www.aboutvb.de (Herausgeber)
"visual studio one" - http://www.visualstudio1.de (Chefredakteur)
Marco von Frieling schrieb:
Danke
(und dabei hab ich die Suche vor meinem Post bemüht, wohl mit Tippfehler?)
Gruß Bernhard