Piotr Szczepanik – programowanie (.Net, C#, SQL), administracja, IT

blog IT: programowanie, administracja
Załóżmy, iż mamy witrynę WWW, bądź dwie, które korzystają tylko i wyłącznie z protokołu https.
Użytkownicy jednak uparcie wpisują w pasku adresu przeglądarki http.

Przydał by się mechanizm, który po odwołaniu na odpowiedni adres po protokole http przekieruje na daną lokalizację przy użyciu protokołu https.

Poniżej przykład skryptu w ASP realizujący to zadanie, dla dwóch różnych adresów. Skrypt ten podpinamy pod daną witrynę (np. jako default.aspx).

 Visual Basic |  kopiuj kod |? 
01
<% Language=VBScript %>
02
<%
03
Dim host
04
host = Request.ServerVariables("HTTP_HOST")
05
Select Case host
06
    Case "poczta.domenka.pl"
07
        Response.Redirect("https://poczta.domenka.pl/owa")
08
    Case "remote.domenka.pl"
09
        Response.Redirect("https://remote.domenka.pl/remote")
10
End Select
11
%>
Mamy nowo postawiony serwer IIS 6. Zainstalowany .Net Framework. Umieszczona witryna napisana w ASP.Net, witryna IIS skonfigurowana do pracy z odpowiednią wersją Framework’a.

Po wpisaniu poprawnego adresu do witryny / pliku ASPX mamy błąd 404 – plik nie istnieje ?

Co robić? Prosta sprawa: sprawdzić czy mamy dozwolone rozszerzenie ASP.Net w naszym serwerze WWW. Zatem:

1. Przechodzimy do Menadżera internetowych usług informacyjnych (IIS).
2. Klikamy na gałęzi „Rozszerzenia usługi sieci Web„.
3. Na liście dostępnych rozszerzeń odszukujemy te o nazwie „ASP.NET…„, zaznaczamy i klikamy „Zezwalaj„.
4. Sprawdzamy czy pomogło ;) .
Nie będę opisywał ani sensu stosowania, ani zalet / wad mechanizmu kompresji HTTP. Opiszę jedynie sposób na implementację tego rozwiązania na serwerze IIS 6.

1. Włączanie kompresji dla witryn w IIS

Przechodzimy do „Menedżera internetowych usług informacyjnych (IIS)„. Klikamy prawym klawiszem na „Witryny sieci Web” i wybieramy polecenie „Właściwości„. Klikamy na zakładkę „Usługa„.

W sekcji „Kompresja protokołu HTTP” zaznaczamy pola:

- Kompresuj pliki aplikacji,

- Kompresuj pliki statyczne.

Możemy dodatkowo ograniczyć maksymalny rozmiar katalogu tymczasowego do wybranej przez nas wartości. W przypadku gdy włączymy tą opcję, a rozmiar katalogu osiągnie podaną wartość starsze pliki tymczasowe będą zastępowane nowymi.

2. Dodawanie rozszerzenia usługi Web

Przechodzimy do „Menedżera internetowych usług informacyjnych (IIS)„. Klikamy prawym klawiszem na „Rozszerzenia usługi sieci Web” i wybieramy polecenie „Dodaj nowe rozszerzenie usługi sieci Web„.

Podajemy nazwę rozszenia, np. HTTP Compression.

Klikamy na przycisk „Dodaj” i wskazujemy plik: C:\WINDOWS\system32\inetsrv\gzip.dll

Uwaga: ścieżka do pliku gzip.dll może ulec zmianie w zależności od systemu.

Zaznaczamy „Ustaw stan rozszerzenia na ‘dozwolone’” i klikamy na „OK„.

3. Konfigurowanie rozszerzeń podlegających kompresji

Przechodzimy do katalogu c:\Windows\System32\inetsrv .

Na wszelki wypadek wykonujemy kopię pliku MetaBase.xml, a następnie otwieramy oryginalny plik do edycji.

Odnajdujemy sekcję „IIsCompressionScheme” dotyczacą kompresji gzip, czyli sekcję z atrybutem „Location” ustawionym na wartość „/LM/W3SVC/Filters/Compression/gzip„.

Odnajdziemy sekcję podobną do poniższej:

 XML |  kopiuj kod |? 
01
<IIsCompressionScheme 
02
Location ="/LM/W3SVC/Filters/Compression/gzip"
03
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
04
HcCreateFlags="1"
05
HcDoDynamicCompression="TRUE"
06
HcDoOnDemandCompression="TRUE"
07
HcDoStaticCompression="TRUE"
08
HcDynamicCompressionLevel="0"
09
HcFileExtensions="htm
10
html
11
txt"
12
HcOnDemandCompLevel="10"
13
HcPriority="1"
14
HcScriptFileExtensions="asp
15
dll
16
exe"
17
>
18
</IIsCompressionScheme>

W atrybucie "HcScriptFileExtensions" konfigurujemy pliki o jakim rozszeżeniu mają podlegać kompresji HTTP.

Zapisujemy zmodyfikowany plik i od tej pory możemy cieszyć się dobrodziejstwami kompresji HTTP.
Czy zdarzały Ci się utraty zawartości sesji (w trybie InProc) w swojej aplikacji ASP.Net ?

Jedną z przyczyn takich zdarzeń może być fakt restartu aplikacji webowej.

Możliwe przyczyny restartu aplikacji:

  • modyfikacja któregoś z plików: machine.config, web.config, global.asax; w niektórych przypadkach programy antywirusowe mogą powodować, iż pomimo braku modyfikacji zawartości tych plików serwer dokona restartu aplikacji,
  • modyfikacja plików w katalogu bin aplikacji,
  • pliki ASP.Net (np. aspx, asmx) zostały zmodyfikowane, a w rezultacie przekompilowane więcej razy niż wskazuje sekcja compile -> numRecompilesBeforeApprestart pliku machine.config; domyślnie wartość ta jest dosyć niska, dlatego w przypadku gdy często dokonujemy aktualizacji naszych plików aplikacji na serwerze zaleca się jej zwiększenie,
  • wewnątrz katalogu aplikacji został utworzony / skasowany / lub została zmieniona nazwa innego katalogu,
  • pula aplikacji (AppPool) w IIS jest skonfigurowana tak, aby odświeżanie aplikacji (app recycle) wykonywane było zbyt często; aby zmodyfikować wartości odświeżania należy przejść do menadżer internetowych usług informacyjnych > pule aplikacji > [pula naszej aplikacji]  > prawy klawisz myszki - Właściwości : zakładka Odświeżanie.
W przypadku używania trybu InProc do przechowywania stanu sesji, gdy w IIS używamy (Ogrodu sieci Web garden) mogą nastąpić utraty stanu sesji bez restartu aplikacji. W takim przypadku musimy sprawdzić czy wartość Maksymalna liczba procesów roboczych dla puli naszej aplikacji nie jest ustawiona na liczbę większą od 1.

Aby przejść do konfiguracji Ogrodu sieci: menadżer internetowych usług informacyjnych > pule aplikacji > [pula naszej aplikacji]  > prawy klawisz myszki - Właściwości : zakładka Wydajność, sekcja Ogród sieci Web.