2012-03-24 6 views
1

Ich habe versucht, wie sicher es ist, eine schreibgeschützte Referenz auf den HttpContext zu erhalten, nachdem eine Anfrage abgeschlossen ist. Insbesondere suche ich nach einem Verweis auf HttpContext.Current, wenn eine Anfrage ausgeführt wird, und dann einen Verweis auf den Kontext in eine In-Memory-Warteschlange für die spätere Auswertung (möglicherweise bis zu ein paar Sekunden später) auf einem anderen Thread .Behalten Sie einen Verweis auf HttpContext auf anderen Thread nach Anforderung abgeschlossen ist

Offensichtlich versucht zu arbeiten und zu versuchen, in den Kontext zu schreiben. Antwort wird nicht funktionieren, und ich bin nicht besonders daran interessiert. Stattdessen bin ich daran interessiert, einige Werte für den Kontext zu lesen.Request-Eigenschaft und einige andere Werte aus dem Kontext selbst, z. context.Timestamp, context.Items und vielleicht ein paar andere.

Vorläufige Tests zeigen, dass ich das kann, aber ich versuche, absichtlich und nicht zufällig zu programmieren. Kann irgendjemand auf irgendeine Dokumentation (oder vielleicht einen Blog-Beitrag oder etwas von Jon Skeet) verweisen, die anzeigt, dass Referenzen aufrechterhalten werden können, nachdem die HTTP-Anfrage abgeschlossen ist?

+5

Warum nicht einfach die Werte kopieren, die Sie brauchen? Schneller, sicherer usw. – bzlm

+0

Ich weiß nicht genau, welche Werte ich brauche. In einem Worst-Case-Szenario könnte ich die Werte bei Bedarf in eine HttpContextBase kopieren. –

+3

Wenn Sie mit Absicht und nicht zufällig programmieren, wissen Sie, welche Werte Sie benötigen. Es gibt kein "wird brauchen". :) – bzlm

Antwort

2

Nein, das ist nicht sicher, aber es hat wenig mit Threading zu tun.

Es ist Http Kontext .Aktuell. Das ist Kontext wie in "Kontext der aktuellen Anfrage".

Verwenden Sie dies nicht, nachdem die Anfrage beendet ist!

Die verschiedenen IDisposable-Ressourcen im Kontext wurden entsorgt. Verwenden Sie sie daher nicht. Eine beliebige Anzahl anderer Dinge, die während der Anfrage gültig waren, ist nicht gültig, da die Anfrage über ist.

Sobald Sie entscheiden, welche Teile Sie benötigen, kopieren Sie diese Teile und speichern Sie sie.

+0

Ich sehe Dinge wie Request.QueryString, Request .Headers, vielleicht sogar HttpContext.Items (was wirklich Hashtable unter der Haube ist). –

+0

Dann kopieren Sie diese, sobald Sie sicher sind, dass Sie sie brauchen. –

Verwandte Themen