Wdrażanie aplikacji internetowej ASP.NET za pomocą programu SQL Server Compact przy użyciu programu Visual Studio lub Visual Web Developer: przekształcenia plików Web.Config — 3 z 12
Autor: Tom Dykstra
W tej serii samouczków pokazano, jak wdrożyć (opublikować) projekt aplikacji internetowej ASP.NET zawierający bazę danych SQL Server Compact przy użyciu programu Visual Studio 2012 RC lub Visual Studio Express 2012 RC for Web. Jeśli zainstalujesz aktualizację publikowania w sieci Web, możesz również użyć programu Visual Studio 2010. Aby zapoznać się z wprowadzeniem do serii, zobacz pierwszy samouczek z serii.
Aby zapoznać się z samouczkiem przedstawiającym funkcje wdrażania wprowadzone po wersji RC programu Visual Studio 2012, pokazano, jak wdrożyć wersje programu SQL Server inne niż SQL Server Compact i pokazuje, jak wdrożyć w usłudze aplikacja systemu Azure Service Web Apps, zobacz ASP.NET Web Deployment using Visual Studio (Wdrażanie w internecie przy użyciu programu Visual Studio).
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 pozwala na ręczne wykonywanie ich 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 Debugowanie i wydawanie, a konfiguracje kompilacji niestandardowej można tworzyć. Profil publikowania zazwyczaj odpowiada środowisku docelowemu. (Więcej informacji na temat profilów publikowania znajdziesz w temacie Wdrażanie w usługach IIS jako samouczek dotyczący środowiska testowego).
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 ten samouczek, wiesz, że 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.
Tworzenie plików transformacji dla profilów publikowania
W Eksplorator rozwiązań rozwiń węzeł Web.config, aby wyświetlić pliki przekształceń Web.Debug.config i Web.Release.config, które są domyślnie tworzone dla dwóch domyślnych konfiguracji kompilacji.
Pliki transformacji dla niestandardowych konfiguracji kompilacji można utworzyć, klikając prawym przyciskiem myszy plik Web.config i wybierając polecenie Dodaj przekształcenia konfiguracji z menu kontekstowego, ale w tym samouczku nie musisz tego robić.
Potrzebujesz jeszcze dwóch plików transformacji, aby skonfigurować zmiany związane z miejscem docelowym wdrożenia, a nie konfiguracją kompilacji. Typowym przykładem tego typu ustawienia jest punkt końcowy programu WCF, który różni się w przypadku testowania i produkcji. W kolejnych samouczkach utworzysz profile publikowania o nazwie Test i Production, więc potrzebujesz pliku Web.Test.config i pliku Web.Production.config.
Pliki przekształcania powiązane z profilami publikowania muszą być tworzone ręcznie. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt ContosoUniversity i wybierz polecenie Otwórz folder w Eksploratorze Windows.
W Eksploratorze Windows wybierz plik Web.Release.config , skopiuj plik, a następnie wklej dwie kopie. Zmień nazwy tych kopii Web.Production.config i Web.Test.config, a następnie zamknij Eksplorator Windows.
W Eksplorator rozwiązań kliknij pozycję Odśwież, aby wyświetlić nowe pliki.
Wybierz nowe pliki, kliknij prawym przyciskiem myszy, a następnie kliknij polecenie Uwzględnij w projekcie w menu kontekstowym.
Aby zapobiec wdrażaniu tych plików, wybierz je w Eksplorator rozwiązań, a następnie w oknie Właściwości zmień właściwość Akcja kompilacji z Zawartości na Brak. (Pliki transformacji oparte na konfiguracjach kompilacji są automatycznie blokowane podczas wdrażania).
Teraz możesz przystąpić do wprowadzania przekształceń Web.config w plikach transformacji Web.config .
Ograniczanie dostępu dziennika błędów do administratorów
Jeśli wystąpi błąd podczas uruchamiania aplikacji, 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 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. Przyczyna błędu przez żądanie nieprawidłowego adresu URL, takiego jak Studentsxxx.aspx. Zamiast strony błędu "nie znaleziono strony" wygenerowanej przez usługi IIS, zostanie wyświetlona strona GenericErrorPage.aspx .
Aby wyświetlić dziennik błędów, zastąp wszystko w adresie URL po numerze portu elmah.axd (na przykład na zrzucie http://localhost:51130/elmah.axd
ekranu ) i naciśnij Enter:
Nie zapomnij ustawić elementu z powrotem na tryb "RemoteOnly" po zakończeniu customErrors
.
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 lokacji produkcyjnej można dodać regułę autoryzacji, która ogranicza dostęp dziennika błędów tylko do administratorów, konfigurując przekształcenie w pliku Web.Production.config .
Otwórz plik Web.Production.config i dodaj nowy location
element bezpośrednio po tagu otwierania configuration
, jak pokazano tutaj. (Upewnij się, że dodasz tylko location
element, a nie otaczające znaczniki, które są tutaj wyświetlane tylko w celu zapewnienia kontekstu).
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<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 środki ). Podczas testowania lokacji produkcyjnej po wdrożeniu sprawdzisz, czy ta reguła autoryzacji jest skuteczna.
Nie musisz ograniczać dostępu do dziennika błędów w środowisku testowym, więc nie musisz dodawać tego kodu do pliku Web.Test.config .
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, sprawdź, w jaki sposób można skonfigurować usługę ELMAH w celu zminimalizowania zagrożeń bezpieczeństwa. Przykład 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.
Ustawianie wskaźnika środowiska
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 produkcyjnym.
Strony sieci Web Contoso University odczytują wartość ustawioną w appSettings
pliku 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" w środowisku produkcyjnym.
Otwórz plik Web.Production.config i dodaj appSettings
element bezpośrednio przed tagiem otwierania dodanego location
wcześniej elementu:
<appSettings>
<add key="Environment" value="Prod" 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 . Ten kod powoduje value
ustawienie atrybutu appSettings
Environment
elementu na wartość "Prod" w pliku Web.config wdrożonym w środowisku produkcyjnym.
Następnie zastosuj tę samą zmianę do pliku Web.Test.config , z wyjątkiem ustawienia value
"Test" zamiast "Prod". Po zakończeniu appSettings
sekcja w pliku Web.Test.config będzie wyglądać podobnie do następującego przykładu:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Wyłączanie trybu debugowania
W przypadku kompilacji wydania nie chcesz włączać debugowania niezależnie od tego, w którym środowisku wdrażasz. Domyślnie plik przekształcenia Web.Release.config jest tworzony automatycznie przy użyciu kodu, który usuwa debug
atrybut z compilation
elementu:
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
Atrybut Transform
powoduje pominięcie atrybutu debug
z wdrożonego pliku Web.config przy każdym wdrożeniu kompilacji wydania.
Ta sama transformacja znajduje się w plikach przekształcania testowego i produkcyjnego, ponieważ zostały utworzone przez skopiowanie pliku przekształcenia wydania. Nie trzeba go tam duplikować, więc otwórz każdy z tych plików, usuń element kompilacji i zapisz i zamknij każdy plik.
Ustawianie parametrów połączenia
W większości przypadków nie trzeba konfigurować parametry połączenia przekształceń, ponieważ można określić parametry połączenia w profilu publikowania. Istnieje jednak wyjątek podczas wdrażania bazy danych SQL Server Compact i używasz migracje Code First platformy Entity Framework do aktualizowania bazy danych na serwerze docelowym. W tym scenariuszu należy określić dodatkowe parametry połączenia, które będą używane na serwerze do aktualizowania schematu bazy danych. Aby skonfigurować tę transformację, dodaj element connectionStrings> bezpośrednio po otwarciu <tagu konfiguracji> zarówno w pliku Web.Test.config, jak i plikach przekształcania Web.Production.config: <
<connectionStrings>
<add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>
Atrybut Transform
określa, że ten parametry połączenia zostanie dodany do elementu connectionStrings w wdrożonym pliku Web.config. (Proces publikowania tworzy tę dodatkową parametry połączenia automatycznie, jeśli nie istnieje, ale domyślnie atrybut providerName jest ustawiony na System.Data.SqlClient
wartość , która nie działa dla programu SQL Server Compact. Dodając parametry połączenia ręcznie, należy zachować proces wdrażania przed utworzeniem elementu parametry połączenia z nieprawidłową nazwą dostawcy).
Teraz określono wszystkie przekształcenia Web.config potrzebne do wdrożenia aplikacji Contoso University w celu testowania i produkcji. W poniższym samouczku zajmiesz się zadaniami konfiguracji wdrożenia, które wymagają ustawienia właściwości projektu.
Więcej informacji
Aby uzyskać więcej informacji na temat tematów omówionych w tym samouczku, zobacz scenariusz przekształcania Web.config w ASP.NET Mapa zawartości wdrożenia.