expertenaustausch > microsoft.* > microsoft.german.entwickler.dotnet.asp

Bernhard (29.03.2007, 17:08)
Hallo zusammen.

Ich habe folgendes Beispiel in des Hilfe gefunden.
Benachrichtigen einer Anwendung beim Entfernen eines Elements aus dem Cache

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();
}
}
Marco von Frieling (29.03.2007, 21:38)
Hallo Bernhard schrieb:
> 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?

Schau mal hier:


lg,
Marco
Harald M. Genauck (30.03.2007, 03:32)
Hallo Bernhard,

[..]
> 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 (Herausgeber)
"visual studio one" - (Chefredakteur)
Bernhard (30.03.2007, 10:08)
Hallo Harald,

"Harald M. Genauck" wrote:

> 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


Besten Dank

Die Antwort hat mir sehr geholfen.

Grüße Bernhard
user (30.03.2007, 10:24)
Hallo Marco,

Marco von Frieling schrieb:
> Hallo Bernhard schrieb:
> Schau mal hier:
>
> lg,
> Marco


Danke
(und dabei hab ich die Suche vor meinem Post bemüht, wohl mit Tippfehler?)

Gruß Bernhard
admiradordedamas (05.08.2015, 17:26)
Any solution about it ? full source code ?
Ähnliche Themen