【发布时间】:2017-07-24 20:47:28
【问题描述】:
我正在尝试使用Hangfire 对通过HttpHandler 获取的数据进行排队处理。
Hangfire 服务器已正确配置,并且可以正常使用类似于here 解释的简单功能。
我似乎无法找到一种方法来使用我的 HttpContext 数据来处理 Hangfire。
此代码有效:
public void ProcessRequest(HttpContext context)
{
var jobId = BackgroundJob.Enqueue(
() => Console.WriteLine("HELLO")
);
}
此代码不起作用:
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);
}
我收到了BackgroundJobClientException:
{"检测到具有类型的属性'Context'的自引用循环 'System.Web.HttpContext'。路径 'ApplicationInstance'。"}
阅读主题后,似乎HttpContext 无法序列化,这是作业管理Hangfire 做的第一步(见上一个链接)。
如何使用 Hangfire 处理我的 HTTP 请求?
【问题讨论】:
-
这永远行不通。您不能只在这样的线程上传递 HTTP 上下文,并期望您可以在最后写回响应。 Hangfire 不应该用于此类工作。为什么不在控制器中使用 async/await?