2

IIS 7.5で実行されているマルチテナント.Net MVC4アプリケーションがあります。

IIS がその出力キャッシュにキャッシュすることを望みます。これは、すべてのテナント、すべてのコントローラーでアクセスできる共通のリソースです。

例えば:

/MyTenant1/MyController/MyAction1/Help
/MyTenant1/MyController/MyAction2/Help
/MyTenant2/MyController/MyAction1/Help
[...]

これらのヘルプはすべてまったく同じです。IIS で Help.aspx を単一のリソースとしてキャッシュし、それを任意のテナント、任意のコントローラー、任意のアクションに提供したいと考えています...

よろしくお願いいたします。

4

2 に答える 2

1

前の回答で望ましい結果が得られるとは思いません(スコアが低いため、申し訳ありませんがコメントできません)。OPはここで私に反対することができますが、私の考えです...

キャッシュ キーはフル パスで構成され、OP の場合は以下が含まれます。

/MyTenant1/MyController/MyAction1/Help /MyTenant2/MyController/MyAction1/Help

したがって、一意になるため、同じコンテンツの複数のコピーが作成されます。

カスタム キャッシュ プロバイダーを作成し、これらの個別のキーを共通キーにマップするキー変換ロジックを考え出すことができます (テナンシー ビットを無視しますか?) 。これについては、 MSDNを参照してください。それが一つの解決策です。

その他の、それほどエレガントではない解決策 (IMHO) は、単一のページ (テナンシーなし) を作成し、サーバー書き換えルールを使用して他のテナンシーからそれにマップすることです。

于 2013-09-12T14:49:52.813 に答える
1

すべてのアクションに OutputCache 属性を使用できます

[OutputCache(Duration=600)]
public ActionResult MyAction1

または、CacheProfile を設定できます

[OutputCache(CacheProfile = "Cache1Hour")]
public ActionResult MyAction1 ...

それをWebConfigとして定義します

<system.web>
    <caching>
      <outputCacheSettings>
          <outputCacheProfiles>
              <add name="Cache1Hour" duration="3600"/>
          </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
</system.web>

さらに、キャッシュを配置する場所を定義できます。

Location プロパティは、次のいずれかの値に設定できます。

・ どれでも

・ クライアント

・下流

・サーバー

・ なし

· サーバーとクライアント

例を含むチュートリアル:

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

于 2013-09-12T14:22:11.537 に答える