Неверный Thread.CurrentPrincipal в асинхронном конечном метод WCF
У меня есть сервис WCF, который имеет свойThread.CurrentPrincipal
установить вServiceConfiguration.ClaimsAuthorizationManager
.
Когда я внедряю сервис асинхронно, как это:
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
}
Я обнаружил, что Thread.CurrentPrincipal установлен на правильный ClaimsPrincipal в Begin-методе, а также в WorkerFunction, но в End-методе он установлен на GenericPrincipal.
Я знаю, что могу включить совместимость ASP.NET для службы и использоватьHttpContext.Current.User
который имеет правильный принцип во всех методах, но я бы предпочел не делать этого.
Есть ли способ принудительно установить Thread.CurrentPrincipal для правильного ClaimsPrincipal без включения совместимости с ASP.NET?