Thread.CurrentPrincipal
にセットを持つWCFサービスがあり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 は、Begin メソッドと WorkerFunction で正しい ClaimsPrincipal に設定されていますが、End メソッドでは GenericPrincipal に設定されています。
サービスの ASP.NET 互換性を有効にしHttpContext.Current.User
て、すべてのメソッドで正しいプリンシパルを使用できることはわかっていますが、これは行いたくありません。
ASP.NET 互換性をオンにせずに Thread.CurrentPrincipal を正しい ClaimsPrincipal に強制する方法はありますか?