相关疑难解决方法(0)

从不同的线程访问HttpContext.Current

我有一个C#ASP.NET应用程序,它启动了大约25个不同的线程,在一个名为SiteCrawler.cs的类中运行一些方法.

HttpContext.Current.Session我要保存用户所做的搜索结果,当所有线程都完成运行它呈现给用户.我的问题是该HttpContext.Current对象在生成的线程中为null,因为它不存在.

由于应用程序是多线程的限制,我还有什么其他选项来保存用户/会话特定数据而不使用会话?

我试图搜索Stackoverflow的每一寸都找到一个解决方案,但没有任何运气....

c# asp.net session httpcontext

53
推荐指数
5
解决办法
5万
查看次数

在异步任务中使用HttpContext

我有以下mvc动作.

public async Task<JsonResult> DoSomeLongRunningOperation()
{
    return await Task.Run(() =>
    {
        //Do a lot of long running stuff
        //The underlying framework uses the HttpContext.Current.User.Identity.Name so the user is passed on the messagebus.
    }
}
Run Code Online (Sandbox Code Playgroud)

在任务中,HttpContext变为null.我们做了很多尝试,但没有任何事情让我们确信HttpContext总是在我们的新线程中可用.

有没有在异步任务中使用HttpContext的解决方案?

在我们的Io​​cContainer中,我们注册了以下对象,该对象将用户名传递给框架.

public class HttpContextUserIdentityName : ICredentials
{
    public string Name
    {
        get { return HttpContext.Current.User.Identity.Name; }
    }
}
Run Code Online (Sandbox Code Playgroud)

在持久化到数据库之前,在很多地方调用此代码.

我们需要另一种方法来获取用户的用户名启动webrequest或修复HttpContext为null的问题.

因为持久化到数据库发生在任务中,所以在进入任务之前无法访问HttpContext.

我也想不出一个临时持久保存用户名的安全方法,所以我可以实现另一个ICredentials服务对象.

c# asp.net-mvc asynchronous async-await asp.net-mvc-3

14
推荐指数
2
解决办法
1万
查看次数