Thread.CurrentPrincipal incorreto no método final assíncrono do WCF
Eu tenho um serviço WCF que tem seusThread.CurrentPrincipal
definido noServiceConfiguration.ClaimsAuthorizationManager
.
Quando eu implemento o serviço assincronamente como este:
public IAsyncResult BeginMethod1(AsyncCallback callback, object state)
{
// Audit log call (uses Thread.CurrentPrincipal)
var task = Task<int>.Factory.StartNew(this.WorkerFunction, state);
return task.ContinueWith(res => callback(task));
}
public string EndMethod1(IAsyncResult ar)
{
// Audit log result (uses Thread.CurrentPrincipal)
return ar.AsyncState as string;
}
private int WorkerFunction(object state)
{
// perform work
}
Acho que o Thread.CurrentPrincipal está definido como o ClaimPrincipal correto no método Begin e também no WorkerFunction, mas no método End está definido como GenericPrincipal.
Eu sei que posso ativar a compatibilidade do ASP.NET para o serviço e usarHttpContext.Current.User
que tem o princípio correto em todos os métodos, mas prefiro não fazer isso.
Existe uma maneira de forçar o Thread.CurrentPrincipal para o ClaimPrincipal correto sem ativar a compatibilidade do ASP.NET?