Frage

Ich mache einige asynchrone Arbeit auf einem separaten Thread mit:

ThreadPool.QueueUserWorkItem()

und in diesem separaten Thread, ich brauche HttpContext.Current zu nennen, damit ich zugreifen kann:

HttpContext.Current.Cache  
HttpContext.Current.Server  
HttpContext.Current.Request  

Allerdings HttpContext.Current ist null, wenn ich diesen separaten Thread erstellen.

Frage

Wie kann ich einen neuen Thread erstellen, so dass HttpContext.Current nicht null ist? Oder gibt es eine andere Art und Weise ich den Cache, Server zugreifen kann, und Request-Objekte?

War es hilfreich?

Lösung

Ich würde nicht versuchen, einen Verweis auf ein Objekt zu halten, die wie die Httpcontext auf dem ASP.NET-Stack abhängt. Wenn Sie eine Arbeit in einem anderen Thread tun müssen, ist es, weil Sie in der ASP.NET warten möchten eine nicht bis Ihre Aufgabe beendet ist. Und vielleicht die Anfrage / Kontext / Session beendet wird, während der Thread nicht.

Sie sollten ein Objekt mit den Daten, die für Ihren Thread übergeben.

Andere Tipps

Sie können die ASP.NET-Cache zugreifen mit HttpRuntime.Cache , auch wenn Sie nicht über ein Httpcontext, aber leider kann man nicht Server oder Anfragen zuzugreifen.

Wenn man darüber nachdenkt, das Sinn -. Sie dienen keine Seite, so dass Sie keinen Antrag haben

1- unten Code hinzufügen in <system.serviceModel> in Web.config-Datei:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

2- Fügen Sie unten Code nach Namespace in Web-Service-Datei:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

3- Webpart Projekt neu. Fertig!

Referenz

Für HttpContext.Server Dienste können Sie HttpServerUtility Klasse. Für den Cache können Sie HttpRuntime.Cache verwenden, wie es oben gesagt wurde. Für das Request-Objekt können Sie die Daten aus der Anfrage an den Thread übergeben, wenn sie erstellt wird. Dinge wie Request.QueryString oder Request.Form ... oder was auch immer.

Es gibt eine Thread-Pool Implementierung hier , dass die Ausbreitung des HTTP rufenden Thread Kontext liefert . Ich habe es noch nicht benutzt, aber ich plane zu.

Wenn der separate Thread versucht, auf diese Objekte zuzugreifen, dann ja sie null sein. Diese Aufgaben werden auf Thread-Ebene scoped. Wenn Sie sie in einem neuen Thread verwenden möchten, müssen Sie sie in die Methode / Klasse übergeben müssen, wo sie gebraucht werden.

Normalerweise ASP.Net erlaubt Ihnen nicht, neue Threads zu erstellen, ... Hier ist ein Threading in ASP.NET von MSDN .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top