Неверный 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?

Ответы на вопрос(3)

Ваш ответ на вопрос