キューに入れられたバックグラウンドワークアイテム内にプリンシパルを保持する

エイミー

ASP.Net Web API 2 / .Net4.5.2を使用しています。

バックグラウンドワークアイテムをキューに入れるときに、呼び出し元のプリンシパルを保持しようとしています。そのために、私は次のことを試みています。

Thread.CurrentPrincipal = callingPrincipal;

しかし、そうすると、ObjectDisposedExceptionが発生します。

System.ObjectDisposedException:セーフハンドルが閉じられました

現在のプリンシパルをバックグラウンドワークアイテム内に保持するにはどうすればよいですか?
どういうわけか元本のコピーを作成できますか?

public void Run<T>(Action<T> action)
{
    _logger.Debug("Queueing background work item");
    var callingPrincipal = Thread.CurrentPrincipal;
    HostingEnvironment.QueueBackgroundWorkItem(token =>
    {
        try
        {
            // UNCOMMENT - THROWS EXCEPTION
            // Thread.CurrentPrincipal = callingPrincipal;
            _logger.Debug("Executing queued background work item");
            using (var scope = DependencyResolver.BeginLifetimeScope())
            {
                var service = scope.Resolve<T>();
                action(service);
            }
        }
        catch (Exception ex)
        {
            _logger.Fatal(ex);
        }
        finally
        {
            _logger.Debug("Completed queued background work item");
        }
    });
}
エイミー

結局のところClaimsPrincipal、今コピーコンストラクタを持っています。

var principal = new ClaimsPrincipal(Thread.CurrentPrincipal);

これにより、すべてのID情報とクレーム情報を保持しながら、問題が解決したようです。完全な機能は次のとおりです。

public void Run<T>(Action<T> action)
{
    _logger.Debug("Queueing background work item");
    var principal = new ClaimsPrincipal(Thread.CurrentPrincipal);

    HostingEnvironment.QueueBackgroundWorkItem(token =>
    {
        try
        {
            Thread.CurrentPrincipal = principal;
            _logger.Debug("Executing queued background work item");
            using (var scope = DependencyResolver.BeginLifetimeScope())
            {
                var service = scope.Resolve<T>();
                action(service);
            }
        }
        catch (Exception ex)
        {
            _logger.Fatal(ex);
        }
        finally
        {
            _logger.Debug("Completed queued background work item");
        }
    });
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

キューに入れられたバックグラウンドワークアイテムの遅延

分類Dev

Hangfire:クリティカルセクション内からバックグラウンドジョブをキューに入れる

分類Dev

DNSルックアップをオーバーライドするためにdnsjavaキャッシュにエントリを入れる方法

分類Dev

RAMにはアクティブなものだけを保持しながら、バックグラウンドで実行されているアイドル状態のソフトウェアのメモリ データをスワップするために転送しますか?

分類Dev

バックグラウンドサービスを介してAndroidアプリでモバイルサービスを呼び出す方法、またはオフラインの場合はキューに入れる方法

分類Dev

AWS:プライベートインスタンスからインターネットに直接接続されたロードバランサーにアクセスできるようにするセキュリティグループ

分類Dev

erikrasによるユニバーサルリアクションreduxボイラープレートのサイドバーに生成されたメニューアイテムのroutes.jsに動的ルーティングを実装する方法

分類Dev

フルスクリーンモードに入ると、タスクバーからアイコンが非表示になり、アプリケーションはバックグラウンドから実行されます

分類Dev

相対ソースルートの親コントロールのプロパティを子クラスのアタッチされたプロパティにバインドする-アプリをクラッシュさせる

分類Dev

tornadofxアプリ内のobservableArrayListにバインドされたアイテムのフィルタリングを可能にするためにビューをリファクタリングするにはどうすればよいですか?

分類Dev

セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

分類Dev

パスワードが要求されたときにエイリアスコマンドをバックグラウンドに移動する

分類Dev

アップロードする前に画像にハイパーリンクとキャプションを追加するために使用するバックエンドシステムを作成するにはどうすればよいですか?

分類Dev

アプリがバックグラウンドで再起動したときにメインキューがディスパッチされますか?

分類Dev

オールインワン(Edge / Firefox / Chrome)ブラウザ拡張機能のコンテンツスクリプトにメッセージパッシングコールバックを実装するにはどうすればよいですか?

分類Dev

データがバックエンドから来たときに、グリッドビューからアイテムがクリックされたときにレイアウトを更新する方法

分類Dev

Specman e:ドライバーのアイテムキューをシーケンスからロックするにはどうすればよいですか?

分類Dev

forEachに渡されたコールバック内からJavascript配列をスプライシングする

分類Dev

コールバック関数内で作成された別のドロップダウンからドロップダウンアイテムを作成する

分類Dev

AWS RDSインスタンスに割り当てられたAWSセキュリティグループにとって、アウトバウンドトラフィックとはどういう意味ですか?

分類Dev

ユーザーIDまたはパスワードを挿入しませんでした。ログインボタンをクリックすると、アプリケーションが強制的に閉じられました。

分類Dev

Hangfireバックグラウンドジョブはキューに入れられたままです

分類Dev

Apolloクライアントローカルにキャッシュされたミューテーションをサーバーに送信する方法

分類Dev

残念ながら、フラグメントビューでブックマークされたアイテムをクリックするとアプリケーションが停止しました。タイトルとリンクを保存するためにjsonを使用しています。

分類Dev

アプリがバックグラウンドからフォアグラウンドに入るたびにアプリがリロードされるように、api urlメソッドを呼び出す方法は?

分類Dev

C ++でコンパイルされたプログラムをバックグラウンドで実行し、必要に応じて入力を送信する

分類Dev

モバイルアプリケーションクライアントのバックエンドdjangoにCSRFセキュリティを使用する方法

分類Dev

GoランタイムからGoogleCloudStorageにアップロードされたファイルのパブリックリンクを取得する

分類Dev

アプリがバックグラウンドにあるときに、カスタムローカル通知ビューまたはカスタムアラートビューを表示するにはどうすればよいですか?

Related 関連記事

  1. 1

    キューに入れられたバックグラウンドワークアイテムの遅延

  2. 2

    Hangfire:クリティカルセクション内からバックグラウンドジョブをキューに入れる

  3. 3

    DNSルックアップをオーバーライドするためにdnsjavaキャッシュにエントリを入れる方法

  4. 4

    RAMにはアクティブなものだけを保持しながら、バックグラウンドで実行されているアイドル状態のソフトウェアのメモリ データをスワップするために転送しますか?

  5. 5

    バックグラウンドサービスを介してAndroidアプリでモバイルサービスを呼び出す方法、またはオフラインの場合はキューに入れる方法

  6. 6

    AWS:プライベートインスタンスからインターネットに直接接続されたロードバランサーにアクセスできるようにするセキュリティグループ

  7. 7

    erikrasによるユニバーサルリアクションreduxボイラープレートのサイドバーに生成されたメニューアイテムのroutes.jsに動的ルーティングを実装する方法

  8. 8

    フルスクリーンモードに入ると、タスクバーからアイコンが非表示になり、アプリケーションはバックグラウンドから実行されます

  9. 9

    相対ソースルートの親コントロールのプロパティを子クラスのアタッチされたプロパティにバインドする-アプリをクラッシュさせる

  10. 10

    tornadofxアプリ内のobservableArrayListにバインドされたアイテムのフィルタリングを可能にするためにビューをリファクタリングするにはどうすればよいですか?

  11. 11

    セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

  12. 12

    パスワードが要求されたときにエイリアスコマンドをバックグラウンドに移動する

  13. 13

    アップロードする前に画像にハイパーリンクとキャプションを追加するために使用するバックエンドシステムを作成するにはどうすればよいですか?

  14. 14

    アプリがバックグラウンドで再起動したときにメインキューがディスパッチされますか?

  15. 15

    オールインワン(Edge / Firefox / Chrome)ブラウザ拡張機能のコンテンツスクリプトにメッセージパッシングコールバックを実装するにはどうすればよいですか?

  16. 16

    データがバックエンドから来たときに、グリッドビューからアイテムがクリックされたときにレイアウトを更新する方法

  17. 17

    Specman e:ドライバーのアイテムキューをシーケンスからロックするにはどうすればよいですか?

  18. 18

    forEachに渡されたコールバック内からJavascript配列をスプライシングする

  19. 19

    コールバック関数内で作成された別のドロップダウンからドロップダウンアイテムを作成する

  20. 20

    AWS RDSインスタンスに割り当てられたAWSセキュリティグループにとって、アウトバウンドトラフィックとはどういう意味ですか?

  21. 21

    ユーザーIDまたはパスワードを挿入しませんでした。ログインボタンをクリックすると、アプリケーションが強制的に閉じられました。

  22. 22

    Hangfireバックグラウンドジョブはキューに入れられたままです

  23. 23

    Apolloクライアントローカルにキャッシュされたミューテーションをサーバーに送信する方法

  24. 24

    残念ながら、フラグメントビューでブックマークされたアイテムをクリックするとアプリケーションが停止しました。タイトルとリンクを保存するためにjsonを使用しています。

  25. 25

    アプリがバックグラウンドからフォアグラウンドに入るたびにアプリがリロードされるように、api urlメソッドを呼び出す方法は?

  26. 26

    C ++でコンパイルされたプログラムをバックグラウンドで実行し、必要に応じて入力を送信する

  27. 27

    モバイルアプリケーションクライアントのバックエンドdjangoにCSRFセキュリティを使用する方法

  28. 28

    GoランタイムからGoogleCloudStorageにアップロードされたファイルのパブリックリンクを取得する

  29. 29

    アプリがバックグラウンドにあるときに、カスタムローカル通知ビューまたはカスタムアラートビューを表示するにはどうすればよいですか?

ホットタグ

アーカイブ