0

Sitefinity で有効化された .NETs 出力キャッシュを使用する複雑な Web サイトがあります。最近、特定のユーザー コントロールに、ユーザーの場所に応じて異なるキャッシュ バージョンを持たせる必要がありました。そこで、VaryByCustom が設定された OutputCache ディレクティブをユーザー コントロールに与え、Global.asax の GetVaryByCustomString メソッドをオーバーライドして、ユーザーの場所を取得しました。問題は、単純なテスト ケースでもこれが機能しないことです。.aspx ページを含む新しいプロジェクトを作成し、その中に新しい .ascx ユーザー コントロールを配置することで、問題が発生しているかどうかを確認するために、Sitefinity のコンテキスト外でこのユース ケースをテストしました。ページには、現在のロード時間とコントロールを取得するラベルがあります。コントロールには、現在の時刻を表示するラベルもあります。ページ OutputCache をこれに設定すると、次のようになります。

<%@ OutputCache Duration="60" VaryByParam="none" %>

そしてこれに設定されたコントロール:

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>

期待される機能は起こりません。このページを 2 つの異なるブラウザーで開いた場合、2 番目のラベルに 2 つの異なる時間が表示されると考えられていました。ここで何かが完全に欠けていますか?私は.NETキャッシングを扱うのは初めてなので、完全に可能です。

ありがとう

GetVaryByCustomString のオーバーライドは次のとおりです。

    public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (custom == "custom")
        {
            // return custom logic
        }
        else
        {
            return base.GetVaryByCustomString(context, custom);
        }
    }
4

1 に答える 1

0

使用している場合

  <%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>

次に、キャッシュは、メジャー バージョンとブラウザーの種類が異なるブラウザーごとに異なる必要があります。そのため、Firefox 3.5.0 と Firefox 3.6.0 では同じように見えるはずですが、Firefox 3.5 と Firefox 2.0 では異なって見えるはずです。

ブラウザーを処理するために、global.asmx で HttpApplication.GetVaryByCustomString を誤ってオーバーロードして、.NET に許可するのではなく、ブラウザーを処理していないと思いますか?

于 2012-06-16T00:05:40.813 に答える