Ich versuche Hangfire
zu verwenden, um die Verarbeitung von Daten, die über eine HttpHandler
erfasst wurden, in die Warteschlange zu stellen.Wie wird die Hangfire-Jobwarteschlange für die Verarbeitung von Anforderungen von ASP.NET HttpHandler verwendet?
Der Hangfire-Server ist korrekt konfiguriert und funktioniert gut mit einfachen Funktionen wie die here erläutert.
Ich kann keinen Weg finden, meine HttpContext
Daten zu verwenden, um mit Hangfire zu arbeiten.
Dieser Code funktioniert:
public void ProcessRequest(HttpContext context)
{
var jobId = BackgroundJob.Enqueue(
() => Console.WriteLine("HELLO")
);
}
Dieser Code nicht funktioniert:
public void ProcessRequest(HttpContext context)
{
var jobId = BackgroundJob.Enqueue(
() => doServerSideWork(context)
);
}
public void doServerSideWork(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Request.InputStream.Position = 0;
var jsonString = String.Empty;
using (var inputStream = new StreamReader(context.Request.InputStream))
{
jsonString = inputStream.ReadToEnd();
}
context.Response.Write(jsonString);
}
Ich erhalte eine BackgroundJobClientException
:
{ "selbstbeziehende Schleife für Eigenschaft erkannt ' Context 'mit dem Typ ' System.Web.HttpContext '. Pfad' ApplicationInstance '. "}
Nach dem Lesen des Themas, scheint es wie eine HttpContext
kann nicht serialisiert werden, die der erste Schritt in der Job-Management Hangfire ist (siehe vorherigen Link).
Wie kann ich mit Hangfire meine HTTP-Anfragen behandeln?
Dies wird nie funktionieren. Sie können nicht einfach einen HTTP-Kontext für Threads wie diesen übergeben und erwarten, dass Sie am Ende auf die Response zurückschreiben können. Hangfire sollte nicht für diese Art von Arbeit verwendet werden. Warum verwenden Sie nicht async/erwarten in Ihrem Controller? –