2

ユーザーが作業を追加できるワーカー キューがあります。ワーカー アイテムが追加されると、コンテキストはユーザー ( HttpContext) になります。ただし、キューをポーリングし、アイテムを 1 つずつ順番に実行するバックグラウンド スレッドです。

HttpContextユーザーが破棄されるとプリンシパルオブジェクトが破棄されるため、ユーザーを格納することはできません

ワーカーで実行できるコードには、プリンシパルが正しいものである必要がありますPrincipalPermissions

また、ライフタイム管理 (IoC) はHttpContextforInRequestスコープを使用しHttpContextますが、正しいプリンシパルなどでを再作成することは可能ですか?

編集: 偽の HttpContext は、ライフ タイム管理の機能があると便利です。これは回避できます。しかし、私たちのバックエンド コードは、ユーザーがシステムのその部分にアクセスできるかどうかを検証するためにこれを使用するため、スレッドの正しいユーザー プリンシパルを持つことに大きく依存しています。ユーザープリンシパルをID、ロール、IsAuthenticated状態で保存し、後で別のスレッドで使用する方法に誰かが答えることができれば、回答としてマークします

4

3 に答える 3

0

必要な情報を保持するために補助クラスを使用してみませんか? Web リクエスト中に適切な値で作成し、引数としてバックグラウンド ワーカーに渡すことができます。

内部サーバー セッション状態HTTPContextのため、オブジェクトのクローンを作成できません。可能であったとしても、値を確認するためだけに実際の HTTP リクエストの外で使用することは、良い解決策とは思えません。

于 2013-05-30T10:54:15.323 に答える
0
public void TestMethod1()
{
    System.Net.WebClient client = new System.Net.WebClient();
    client.BaseAddress = "http://www.teejoo.com";            

    //Invoke your function here
    client.OpenReadAsync(new Uri("http://www.teejoo.com/YourLogicalPage.aspx"));
    //Pur your logical in your page, so you can use httpContext 

    client.OpenReadCompleted += new System.Net.OpenReadCompletedEventHandler(client_OpenReadCompleted);
}

void client_OpenReadCompleted(object sender, System.Net.OpenReadCompletedEventArgs e)
{            
    //to Check the response HERE
}
于 2013-05-30T00:52:02.697 に答える