Wrong Thread.CurrentPrincipal in async WCF end-method
Mam usługę WCF, która ma swojąThread.CurrentPrincipal
ustawić wServiceConfiguration.ClaimsAuthorizationManager
.
Gdy implementuję usługę asynchronicznie w ten sposób:
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
}
Uważam, że Thread.CurrentPrincipal jest ustawiony na poprawny ClaimsPrincipal w metodzie Begin, a także w WorkerFunction, ale w metodzie końcowej jest ustawiony na GenericPrincipal.
Wiem, że mogę włączyć zgodność z ASP.NET dla usługi i użytkowaniaHttpContext.Current.User
który ma poprawną zasadę we wszystkich metodach, ale wolałbym tego nie robić.
Czy istnieje sposób, aby zmusić Thread.CurrentPrincipal do poprawnego ClaimsPrincipal bez włączania zgodności z ASP.NET?