À l'aide de HttpContext dans Async Task

J'ai le texte suivant mvc action.

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.
    }
}

Dans le groupe de la HttpContext obtient la valeur null. Nous avons fait beaucoup de ruse, mais rien ne nous assure de la HttpContext être toujours disponible dans notre nouveau thread.

Est-il une solution pour utiliser HttpContext au sein de sortir async tâches?

Dans notre IocContainer nous avons enregistré l'objet suivant qui passe le nom d'utilisateur pour le cadre.

public class HttpContextUserIdentityName : ICredentials
{
    public string Name
    {
        get { return HttpContext.Current.User.Identity.Name; }
    }
}

Ce code est appelé dans beaucoup d'autres endroits avant de la persistance de la base de données.

Nous avons besoin d'une autre façon d'obtenir le nom d'utilisateur de l'utilisateur qui a initié la webrequest ou de corriger le problème avec le HttpContext être null.

En raison de la persistance de la base de données qui se passe dans la Tâche que je ne peux pas accéder à la HttpContext avant d'entrer dans la tâche.

Je ne peux pas penser à un moyen sûr de temporaire de conserver le nom d'utilisateur afin que je puisse mettre en œuvre un autre ICredentials objet de service.

OriginalL'auteur Marco Franssen | 2012-12-06