IIS7の設定に関する質問。バインディングごとに1つのキャッシュを実行するにはどうすればよいですか?たとえば、1つのサイトとそのサイトの3つのバインディングがあります。3つのバインディングごとに3つの異なるキャッシュを作成する必要があります。
2 に答える
Request.Host
キャッシュ キーの一部として使用します。
キャッシュから手動で読み取りおよびキャッシュへの書き込みを行っている場合、usrの答えは正しいです。ただし、OutputCacheAttributeを使用してキャッシュキーを直接制御することはできません。
OutputCacheAttribute
その実装では、依然としてキャッシュキーに依存していることに注意してください。ASP.NETでは、キャッシュされる各アイテムには、それを検索するためのキーが割り当てられます。
を含むコントローラーアクションを呼び出すと、OutputCacheAttribute
要求に基づいてキャッシュキーが生成されます。たとえば、いくつかのVaryByParam
指定がある場合、キャッシュキーはユーザーごとに異なる可能性があります。次に、アクションが返す応答は、そのキーの下のキャッシュに保存されます。
次のリクエストが来ると、キャッシュキーが生成され、キャッシュをチェックインして、そのキーの下に何かがすでにキャッシュされているかどうかを確認します。もしそうなら、私たちはそれを返すだけです。それ以外の場合は、アクションを続行します。
キャッシュキーにホスト名を含めることで、バインディングごとに異なるキャッシュを作成できます。OutputCacheAttributeを使用している場合は、それをオーバーライドして、ホストごとにキャッシュを変更できるようにすることができます。
public override string GetVaryByCustomString(HttpContext context, string customVary)
{
if(customVary == "Host")
{
return context.Request.Url.Host;
}
// other behaviors here if necessary
return "";
}
これにより、キャッシュキーを動的に変更して、サイトへのアクセスに使用するホスト名を含めることができます。これは、3つの異なるバインディングがある場合、3つの異なるキャッシュキーを持つことを意味します(他のさまざまなパラメーターがないと仮定します)。
コントローラのアクションを変更する方法は次のとおりです。
[MyOutputCache(VaryByParam = "None", VaryByCustom = "Host", Duration = 7200)]
public ActionResult Index()
{
// ...
return View();
}
が含まVaryByCustom = "Host"
GetVaryByCustomString()
れていることに注意してください。これは、オーバーライドされたOutputCacheAttributeのメソッドによって認識されるため、使用されるキャッシュキーに含まれます。