2013-07-23 12 views
12

Niedawno rozpoczęliśmy przenoszenie niektórych witryn ASP.NET MVC z naszego zarządzanego środowiska do platformy Azure. Jednym z problemów, które zauważyliśmy, jest to, że buforowanie po stronie klienta nie działa prawidłowo podczas dostarczania dynamicznie tworzonej treści. W szczególności nagłówki związane z pamięcią podręczną dodane do odpowiedzi HTTP w kodzie są usuwane.Witryna ASP.NET MVC hostowana w usłudze Azure upuszcza nagłówki HTTP związane z pamięcią podręczną klienta.

Na przykład, następujące nagłówki są zwracane na starym środowisku, aby doradzić klientowi, że zawartość może być buforowane:

Cache-Control:   public, max-age=31533144 
Content-Disposition: attachment; filename=picture.png 
Content-Length:   64326 
Content-Type:   image/png 
Date:     Tue, 23 Jul 2013 15:44:57 GMT 
Etag:     "845D3DD630A7AEF5B68EA7A09B670A4D" 
Expires:    Fri, 23 Aug 2013 14:57:22 GMT 
Last-Modified:   Tue, 23 Jul 2013 14:57:22 GMT 
Server:     Microsoft-IIS/7.5 

Ale Azure następujące nagłówki są zwracane zamiast:

Content-Disposition: attachment; filename=picture.png 
Content-Length:   64326 
Content-Type:   image/png 
Date:     Tue, 23 Jul 2013 15:44:57 GMT 
Server:     Microsoft-IIS/8.0 
X-Powered-By:   ARR/2.5, ASP.NET 

Jak widać, nagłówki Cache-Control, Etag, Expires i Last-Modified zostały zaniechane.

Widziałem wiele sugestii dotyczących buforowania treści statycznych, ale nie sądzę, że będą one pomocne w tym przypadku. Czy jest tak, że struktura Azure CDN zapobiega buforowaniu w ten sposób? Czy zamiast tego należy używać bloków Azure? Czy istnieje podstawowa zmiana konfiguracji, która mogła zostać przeoczona?

góry dzięki

+0

Mam dokładnie ten sam problem. Ustawianie nagłówków (np. Response.Cache.SetExpires) działa lokalnie, ale zostaje usunięte po wdrożeniu ... – Gareth

+0

Nie jestem pewien, ale zgodnie z tym artykułem msdn http://msdn.microsoft.com/en-us/library /windowsazure/gg680299.aspx "Jeśli chcesz programowo buforować zawartość aplikacji, upewnij się, że zawartość jest oznaczona jako pamięć podręczna, ustawiając HttpCacheability to Public." –

+4

Hej, tylko po to, abym mógł zrozumieć trochę lepiej - czy korzystasz z witryn Azure lub maszyn wirtualnych Azure? A także, w jaki sposób konfigurujesz buforowanie HTTP? W web.config, przez IIS, programowo (OutputCache)? – Deano

Odpowiedz

1
X-Powered-By:   ARR/2.5, ASP.NET 

ARR stoi na żądania aplikacji Routing.

Przejdź do interfejsu użytkownika inetmgr i kliknij nazwę serwera, a znajdziesz opcję "Application Request Routing Cache".

Zobaczysz "Konfiguracja pamięci podręcznej", sprawdź opcje tam. Sprawdź także "Reguły kontroli pamięci podręcznej". Kliknij "Dodaj regułę ..." i spróbuj się z nim bawić.

0

Witryna internetowa Azure za ARR. ARR usunie niektóre nagłówki HTTP i doda własne, nie jest to coś, nad czym masz bezpośrednią kontrolę. Lepszym rozwiązaniem problemu może być używanie CDN Azure dla statycznej zawartości. Zwraca to uwagę na nagłówki kontrolek pamięci podręcznej i używa ich. Możesz uruchomić CDN na kontenerze kontenery BLOB.

Powiązane problemy