Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Autor: Tom Dykstra
W tej serii samouczków pokazano, jak wdrożyć (opublikować) aplikację internetową ASP.NET do usługi Azure App Service Web Apps lub do dostawcy hostingu innej firmy, korzystając z programu Visual Studio 2012 lub Visual Studio 2010. Aby uzyskać informacje o serii, zobacz pierwszy samouczek z serii.
Omówienie
W tym samouczku pokazano, jak zautomatyzować proces zmiany pliku Web.config podczas wdrażania go w różnych środowiskach docelowych. Większość aplikacji ma ustawienia w pliku Web.config , które muszą być inne podczas wdrażania aplikacji. Automatyzacja procesu wprowadzania tych zmian zapobiega konieczności ich ręcznego wykonywania przy każdym wdrożeniu, co byłoby uciążliwe i podatne na błędy.
Przypomnienie: Jeśli zostanie wyświetlony komunikat o błędzie lub coś nie działa podczas pracy z samouczkiem, pamiętaj, aby sprawdzić stronę rozwiązywania problemów.
Przekształcenia Web.config a parametry Web Deploy
Istnieją dwa sposoby automatyzowania procesu zmiany ustawień pliku Web.config: przekształcenia Web.config i parametry Web Deploy. Plik przekształcenia Web.config zawiera znaczniki XML, które określają sposób zmiany pliku Web.config podczas wdrażania. Można określić różne zmiany dla określonych konfiguracji kompilacji i dla określonych profilów publikowania. Domyślne konfiguracje kompilacji to Debug i Release, a można tworzyć konfiguracje kompilacji niestandardowych. Profil publikowania zazwyczaj odpowiada środowisku docelowemu. (Więcej informacji na temat profilów publikowania znajdziesz w samouczku Wdrażanie do IIS jako środowisko testowe.)
Parametry narzędzia Web Deploy mogą służyć do określania wielu różnych rodzajów ustawień, które należy skonfigurować podczas wdrażania, w tym ustawień znajdujących się w plikach Web.config . W przypadku określania zmian w pliku Web.config parametry narzędzia Web Deploy są bardziej złożone do skonfigurowania, ale są przydatne, gdy nie znasz wartości, która ma zostać ustawiona do momentu wdrożenia. Na przykład w środowisku przedsiębiorstwa można utworzyć pakiet wdrożeniowy i przekazać go osobie w dziale IT do zainstalowania w środowisku produkcyjnym, a ta osoba musi mieć możliwość wprowadzania parametry połączenia lub haseł, których nie znasz.
W scenariuszu, który obejmuje ta seria samouczków, wiesz z wyprzedzeniem wszystko, co należy zrobić w pliku Web.config , więc nie trzeba używać parametrów web deploy. Skonfigurujesz pewne przekształcenia, które różnią się w zależności od używanej konfiguracji kompilacji, a niektóre różnią się w zależności od używanego profilu publikowania.
Określanie ustawień web.config na platformie Azure
Jeśli ustawienia pliku Web.config, które chcesz zmienić, znajdują się w <connectionStrings> lub <appSettings> elemencie, a jeśli wdrażasz w usłudze Web Apps w Azure App Service, możesz zautomatyzować zmiany podczas wdrażania. Możesz wprowadzić ustawienia, które mają zostać zastosowane na platformie Azure na karcie Konfigurowanie strony portalu zarządzania dla aplikacji internetowej (przewiń w dół do ustawień aplikacji i sekcji parametry połączenia). Podczas wdrażania projektu platforma Azure automatycznie stosuje zmiany. Aby uzyskać więcej informacji, zobacz Witryny sieci Web platformy Windows Azure: jak działają ciągi aplikacji i ciągi połączenia.
Domyślne pliki transformacji
W Eksploratorze rozwiązań rozwiń Web.config, aby zobaczyć pliki przekształceń Web.Debug.config i Web.Release.config, które są domyślnie tworzone dla domyślnych dwóch konfiguracji kompilacji.
Pliki transformacji dla niestandardowych konfiguracji kompilacji można utworzyć, klikając prawym przyciskiem myszy plik Web.config i wybierając Dodaj przekształcenia konfiguracji z menu kontekstowego. W tym samouczku nie musisz tego robić, a opcja menu jest wyłączona, ponieważ nie utworzono żadnych niestandardowych konfiguracji kompilacji.
Później utworzysz trzy kolejne pliki transformacji, po jednym dla profilów testowania, przejściowego i produkcyjnego publikowania. Typowym przykładem ustawienia, które można obsłużyć w pliku przekształcania profilu publikowania, ponieważ zależy od środowiska docelowego, jest punkt końcowy WCF, który różni się w środowisku testowym i produkcyjnym. Pliki przekształcania profilu publikowania zostaną utworzone w kolejnych samouczkach po utworzeniu profilów publikowania, z którymi są one używane.
Wyłączanie trybu debugowania
Przykładem ustawienia, które zależy od konfiguracji kompilacji, a nie środowiska docelowego, jest debug atrybut . W przypadku kompilacji wydania zwykle chcesz wyłączyć debugowanie niezależnie od środowiska, w którym wdrażasz. W związku z tym domyślnie szablony projektów programu Visual Studio tworzą pliki przekształcenia Web.Release.config z kodem, który usuwa debug atrybut z compilation elementu. Oto domyślna konfiguracja Web.Release.config: oprócz przykładowego kodu przekształcenia, który jest zakomentowany, zawiera kod w compilation elemencie, który usuwa atrybut debug.
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
</configuration>
Atrybut xdt:Transform="RemoveAttributes(debug)" określa, że atrybut debug ma zostać usunięty z system.web/compilation elementu w wdrożonym pliku Web.config . Będzie to wykonywane za każdym razem, gdy wdrożysz kompilację wydania.
Ograniczanie dostępu dziennika błędów do administratorów
Jeśli podczas uruchamiania aplikacji wystąpi błąd, aplikacja wyświetla ogólną stronę błędu zamiast strony błędu wygenerowanej przez system i używa pakietu NuGet Elmah do rejestrowania błędów i raportowania. Element customErrors w pliku Web.config aplikacji określa stronę błędu:
<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
<error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>
Aby wyświetlić stronę błędu, tymczasowo zmień mode atrybut customErrors elementu z "RemoteOnly" na "Włączone" i uruchom aplikację z programu Visual Studio. Spowoduj błąd, żądając nieprawidłowego adresu URL, takiego jak Studentsxxx.aspx. Zamiast strony błędu wygenerowanego przez usługi IIS "Nie można odnaleźć zasobu", zostanie wyświetlona strona GenericErrorPage.aspx .
Aby wyświetlić dziennik błędów, zastąp wszystko w adresie URL po numerze portu tekstem elmah.axd, (na przykład http://localhost:51130/elmah.axd), i naciśnij klawisz Enter.
Nie zapomnij ustawić elementu customErrors z powrotem na tryb "RemoteOnly" po zakończeniu operacji.
Na komputerze deweloperskim wygodnie jest zezwolić na bezpłatny dostęp do strony dziennika błędów, ale w środowisku produkcyjnym, które byłoby zagrożeniem bezpieczeństwa. W środowisku produkcyjnym chcesz dodać regułę autoryzacyjną, która ogranicza dostęp do dziennika błędów dla administratorów, i aby upewnić się, że ograniczenie działa, chcesz ją mieć także w środowisku testowym i staging. Dlatego jest to kolejna zmiana, którą chcesz zaimplementować za każdym razem, gdy wdrażasz kompilację wydania, a więc należy do pliku Web.Release.config .
Otwórz plik Web.Release.config i dodaj nowy location element bezpośrednio przed tagiem zamykającym configuration , jak pokazano tutaj.
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
<location path="elmah.axd" xdt:Transform="Insert">
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
Wartość Transform atrybutu "Wstaw" powoduje dodanie tego location elementu jako elementu równorzędnego do wszystkich istniejących location elementów w pliku Web.config . (Istnieje już jeden location element określający reguły autoryzacji dla strony Aktualizuj kredyty ).
Teraz możesz wyświetlić podgląd przekształcenia, aby upewnić się, że kod został poprawnie zakodowany.
W Eksploratorze rozwiązań, kliknij prawym przyciskiem myszy na Web.Release.config, a następnie wybierz Podgląd przekształcenia.
Otwiera się strona pokazująca plik deweloperski Web.config po lewej stronie i to, jak będzie wyglądał wdrożony plik Web.config po prawej stronie z wyróżnionymi zmianami.
( W wersji zapoznawczej możesz zauważyć pewne dodatkowe zmiany, dla których nie zostały zapisane przekształcenia: zazwyczaj obejmują usunięcie białych znaków, które nie mają wpływu na funkcjonalność).
Podczas testowania strony po wdrożeniu sprawdzisz również skuteczność reguły autoryzacji.
Uwaga
Uwaga zabezpieczeń Nigdy nie wyświetlaj szczegółów błędu do publicznej wiadomości w aplikacji produkcyjnej lub przechowuj te informacje w lokalizacji publicznej. Osoby atakujące mogą używać informacji o błędach do odnajdywania luk w zabezpieczeniach w witrynie. Jeśli używasz rozwiązania ELMAH we własnej aplikacji, skonfiguruj aplikację ELMAH, aby zminimalizować zagrożenia bezpieczeństwa. Przykład użycia ELMAH w tym samouczku nie powinien być uważany za zalecaną konfigurację. Jest to przykład wybrany w celu zilustrowania sposobu obsługi folderu, w ramach którego aplikacja musi mieć możliwość tworzenia plików. Aby uzyskać więcej informacji, zobacz temat zabezpieczania punktu końcowego ELMAH.
Ustawienie, które będzie obsługiwane w plikach przekształcania profilu publikowania
Typowym scenariuszem jest posiadanie ustawień pliku Web.config , które muszą być inne w każdym środowisku, w którym wdrażasz. Na przykład aplikacja, która wywołuje usługę WCF, może potrzebować innego punktu końcowego w środowiskach testowych i produkcyjnych. Aplikacja Contoso University zawiera również ustawienie tego rodzaju. To ustawienie steruje widocznym wskaźnikiem na stronach witryny, które informują o tym, w którym środowisku znajdujesz się, takim jak programowanie, testowanie lub produkcja. Wartość ustawienia określa, czy aplikacja dołączy ciąg "(Dev)" lub "(Test)" do głównego nagłówka na stronie wzorcowej Site.Master:
Wskaźnik środowiska zostanie pominięty, gdy aplikacja jest uruchomiona w środowisku przejściowym lub produkcyjnym.
Strony sieci Web Contoso University odczytują wartość ustawioną w appSettingspliku Web.config w celu określenia środowiska, w którym działa aplikacja:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
Wartość powinna być "Test" w środowisku testowym i "Prod" dla środowiska przejściowego i produkcyjnego.
Następujący kod w pliku transformacji zaimplementuje tę transformację:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Wartość xdt:Transform atrybutu "SetAttributes" wskazuje, że celem tej transformacji jest zmiana wartości atrybutów istniejącego elementu w pliku Web.config . Wartość xdt:Locator atrybutu "Match(key)" wskazuje, że element, który ma zostać zmodyfikowany, jest tym, którego key atrybut pasuje do atrybutu określonego key tutaj. Jedynym innym atrybutem add elementu jest value, a to, co zostanie zmienione w wdrożonym pliku Web.config . Pokazany tutaj kod powoduje, że atrybut value elementu EnvironmentappSettings jest ustawiany na "Test" w wdrożonym pliku Web.config.
Transformacja ta należy do plików transformacji profilu publikowania, które jeszcze nie zostały utworzone. Utworzysz i zaktualizujesz pliki przekształcania, które implementują tę zmianę podczas tworzenia profilów publikowania dla środowisk testowych, przejściowych i produkcyjnych. Zrobisz to w samouczku wdrażania do IIS i w samouczkach wdrażania na produkcję.
Uwaga
Ponieważ to ustawienie znajduje się w <appSettings> elemencie, masz alternatywę dla określenia przekształcenia podczas wdrażania aplikacji Web na platformie Azure App Service. Szczegóły znajdziesz w sekcji Określanie ustawień web.config na platformie Azure we wcześniejszej części tego tematu.
Ustawianie parametrów połączenia
Mimo że domyślny plik przekształcenia zawiera przykład pokazujący, jak zaktualizować parametr połączenia, w większości przypadków nie trzeba konfigurować przekształceń parametrów połączenia, bo można określić parametry połączenia w profilu publikowania. Zrobisz to podczas wdrażania na IIS i podczas wdrożenia na produkcji w samouczkach wdrożeniowych.
Podsumowanie
Teraz wykonałeś już tyle przekształceń Web.config, ile to możliwe przed utworzeniem profilów publikowania, i zobaczyłeś podgląd tego, co będzie się znajdować we wdrożonym pliku Web.config.
W poniższym samouczku zajmiesz się konfiguracją implementacji, która wymaga ustawienia właściwości projektu.
Więcej informacji
Aby uzyskać więcej informacji na temat tematów omówionych w tym samouczku, zobacz Using Web.config transformations to change settings in the destination Web.config file or app.config file during deployment in the Web Deployment Content Map for Visual Studio and ASP.NET (Używanie przekształceń Web.config w celu zmiany ustawień w docelowym pliku Web.config lub pliku app.config podczas wdrażania w mapie zawartości wdrożenia sieci Web dla programu Visual Studio i ASP.NET).