Pamięć podręczna wyjściowa dla aplikacji wielodostępnych, różniąca się w zależności od nazwy hosta i kultury

Mam aplikację multi-tenant w ASP.NET MVC. Instancją aplikacji, która będzie obsługiwana, jest funkcja hostname (coś w stylu stackexchange, jak przypuszczam).

Każda instancja aplikacji może mieć inną kulturę (nawet "auto", aby odczytać język przeglądarki i spróbować go użyć) i będzie odpowiednio zlokalizowana .

W tej sytuacji chciałbym zrobić jakieś wyjście buforowanie niektórych moich działań. Więc moje pytania to:

  1. Jakie są możliwości osiągnięcia buforowania wyjścia dla wielu dzierżawców ASP.NET aplikacja MVC, jeśli wyjście zależy wyłącznie od nazwy hosta (tj. ignorując wymóg lokalizacji)?

  2. To samo co (1), ale teraz biorąc pod uwagę, że wyjście zależy również od ustawień Kultury?

  3. To samo co (2), ale biorąc pod uwagę, że wyjście może się różnić w zależności od parametrów , które zostały przekazane do akcji?

W tym przypadku rozważam, że wszystkie witryny działają z jednej strony IIS.

Author: Michael, 2010-01-06

1 answers

Właśnie wymyśliłem, jak to osiągnąć.

Po prostu użyj właściwości VaryByHeader, ustawionej na "host". Istnieje wiele możliwości, aby to zrobić.

Metoda 1

Użyj OutputCacheAttribute przekazując wszystkie potrzebne elementy konfiguracji, w tym VaryByHeader:

public class HomeController : Controller
{  
    [OutputCache(Duration = 3600, VaryByParam = "none", VaryByHeader = "host")]
    public ActionResult Index() { /* ... */ }
}

Metoda 2.

Albo możesz ustawić go na profil w sieci.config:

<?xml version="1.0"?>
<configuration>
  <!-- ... -->
  <system.web>
    <!-- ... -->
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <clear/>
          <add name="Multitenant" 
               enabled="true"
               duration="3600"
               varyByHeader="host"
               varyByParam="none"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
  </system.web>
</configuration>

Następnie użyj go:

public class HomeController : Controller
{  
    [OutputCache(CacheProfile = "Multitenant")]
    public ActionResult Index() { /* ... */ }
}

Metoda 3.

Lub możesz podklasować OutputCacheAttribute i użyć go:

public sealed class MultitenantOutputCacheAttribute : OutputCacheAttribute
{
    public MultitenantOutputCacheAttribute()
    {
        VaryByHeader = "host";
        VaryByParam = "none";
        Duration = 3600;
    }
}

Then użyj go:

public class HomeController : Controller
{  
    [MultitenantOutputCache]
    public ActionResult Index() { /* ... */ }
}
 55
Author: Bruno Reis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 11:40:03