2

IIS でホストされる ASP.NET ApiController を作成しています。アクションで、Tencent という会社が提供する A という名前の Web サービスを呼び出す必要があります。このサービスでは、認証にキーを使用する必要があります。キーは、Tencent の B という名前の別の Web インターフェイスを呼び出すことによって生成され、キーは 3 時間有効です。サービス B は 1 日あたりの通話数に制限があります。したがって、A を使用したいときはいつでも B を呼び出すことはできません。B を一度だけ呼び出して、将来の使用のためにデータベースにキーを保存できます。

つまり、サービス A を使用するたびに、データベースからキーの検証を確認し、有効期限が切れている場合は B を呼び出して新しいキーを取得する必要があります。

ここで、B を呼び出してキーを更新する必要がある場合、新しいキーが返される前に ApiController アクションが再度呼び出されたらどうなるでしょうか? 新しいリクエストは、データベース内のキーが古くなっていることも検出し、B を再度呼び出して、A が新たに取得したキーを無効にし、A がキーを再度取得するという無限ループを引き起こします。

私の質問は、どうすればこの種の心配を取り除くことができますか? どうすれば始められますか? SQL または IIS または ASP.NET からですか?

EF6 でデータベースの読み取り/書き込みを行い、ASP.NET MVC 5 を使用しています。

ご協力いただきありがとうございます!

-- 補足 -- lock キーワードの使用を勧められました。ただし、IIS のすべての要求でロックがデータベースの読み取り/書き込み部分を安全に保護することを知って安心したいと思います。IIS が同じ ASP.NET モジュールへの複数の要求をどのように処理し、その同時実行制御を行うかについての記事はありますか?

4

1 に答える 1