Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Tom Dykstra
In dieser Reihe von Lernprogrammen erfahren Sie, wie Sie ein ASP.NET Webanwendungsprojekt bereitstellen (veröffentlichen), das eine SQL Server Compact-Datenbank mit Visual Studio 2012 RC oder Visual Studio Express 2012 RC für Web enthält. Sie können Visual Studio 2010 auch verwenden, wenn Sie das Web Publish Update installieren. Eine Einführung in die Reihe finden Sie im ersten Lernprogramm in der Reihe.
Ein Tutorial zeigt Bereitstellungsfunktionen, die nach der RC-Version von Visual Studio 2012 eingeführt wurden. Es erklärt, wie man andere SQL Server-Editionen als SQL Server Compact bereitstellt und wie man mithilfe von Visual Studio Azure App Service Web-Apps bereitstellt. Siehe ASP.NET Web Deployment mit Visual Studio.
Übersicht
In diesem Lernprogramm erfahren Sie, wie Sie den Prozess der Änderung der Web.config-Datei automatisieren, wenn Sie sie in verschiedenen Zielumgebungen bereitstellen. Die meisten Anwendungen verfügen über Einstellungen in der Datei "Web.config ", die bei der Bereitstellung der Anwendung unterschiedlich sein müssen. Durch die Automatisierung des Prozesses zur Durchführung dieser Änderungen vermeiden Sie, diese bei jeder Bereitstellung manuell ausführen zu müssen, was mühsam und fehleranfällig wäre.
Erinnerung: Wenn Beim Durchlaufen des Lernprogramms eine Fehlermeldung angezeigt wird oder etwas nicht funktioniert, überprüfen Sie unbedingt die Problembehandlungsseite.
Web.config-Transformationen im Vergleich zu Web Deploy-Parametern
Es gibt zwei Möglichkeiten zum Automatisieren des Änderns von Web.config-Dateieinstellungen : Web.config-Transformationen und Web Deploy-Parameter. Eine Web.config-Transformationsdatei enthält XML-Markup, das angibt, wie die Web.config-Datei geändert wird, wenn sie bereitgestellt wird. Sie können unterschiedliche Änderungen für bestimmte Buildkonfigurationen und für bestimmte Veröffentlichungsprofile angeben. Die Standardbuildkonfigurationen sind Debug und Release, und Sie können benutzerdefinierte Buildkonfigurationen erstellen. Ein Veröffentlichungsprofil entspricht in der Regel einer Zielumgebung. (Weitere Informationen zu Veröffentlichungsprofilen finden Sie in der Anleitung Bereitstellung auf IIS als Testumgebung.)
Web Deploy-Parameter können verwendet werden, um viele verschiedene Arten von Einstellungen anzugeben, die während der Bereitstellung konfiguriert werden müssen, einschließlich einstellungen, die in Web.config-Dateien gefunden werden. Wenn sie zum Angeben von Änderungen der Datei "Web.config " verwendet werden, sind Web Deploy-Parameter komplexer zum Einrichten, aber sie sind nützlich, wenn Sie nicht wissen, dass der Wert festgelegt werden soll, bis Sie die Bereitstellung durchführen. In einer Unternehmensumgebung können Sie beispielsweise ein Bereitstellungspaket erstellen und einer Person in der IT-Abteilung zur Installation in der Produktion zuweisen, und diese Person muss in der Lage sein, Verbindungszeichenfolge oder Kennwörter einzugeben, die Sie nicht kennen.
Für das Szenario, das in diesem Lernprogramm behandelt wird, wissen Sie, was für die Datei "Web.config " erforderlich ist, damit Sie keine Web Deploy-Parameter verwenden müssen. Sie konfigurieren einige Transformationen, die je nach verwendeter Buildkonfiguration unterschiedlich sind, und einige, die je nach verwendetem Veröffentlichungsprofil unterschiedlich sind.
Erstellen von Transformationsdateien für Veröffentlichungsprofile
Im Projektmappen-Explorer erweitern Sie Web.config, um die Transformationsdateien "Web.Debug.config" und "Web.Release.config" anzuzeigen, die standardmäßig für die beiden Standard-Buildkonfigurationen erstellt werden.
Sie können Transformationsdateien für benutzerdefinierte Buildkonfigurationen erstellen, indem Sie mit der rechten Maustaste auf die Datei "Web.config" klicken und "Konfigurationstransformationen hinzufügen" aus dem Kontextmenü auswählen, aber für dieses Lernprogramm müssen Sie dies nicht tun.
Sie benötigen zwei weitere Transformationsdateien, um Änderungen zu konfigurieren, die mit dem Bereitstellungsziel zusammenhängen, anstatt mit der Buildkonfiguration. Ein typisches Beispiel für diese Art von Einstellung ist ein WCF-Endpunkt, der sich für Tests im Vergleich zur Produktion unterscheidet. In späteren Tutorials erstellen Sie Veröffentlichungsprofile mit den Namen "Test" und "Produktion", daher benötigen Sie eine Web.Test.config-Datei und eine Web.Production.config-Datei.
Transformationsdateien, die an Veröffentlichungsprofile gebunden sind, müssen manuell erstellt werden. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt ContosoUniversity, und wählen Sie "Ordner öffnen" im Windows-Explorer aus.
Wählen Sie in Windows Explorer die Datei "Web.Release.config " aus, kopieren Sie die Datei, und fügen Sie dann zwei Kopien davon ein. Benennen Sie diese Kopien "Web.Production.config" und "Web.Test.config" um, und schließen Sie dann Windows Explorer.
Klicken Sie in Projektmappen-Explorer auf "Aktualisieren", um die neuen Dateien anzuzeigen.
Wählen Sie die neuen Dateien aus, klicken Sie mit der rechten Maustaste, und klicken Sie dann im Kontextmenü auf "In Project einschließen".
Um zu verhindern, dass diese Dateien bereitgestellt werden, wählen Sie sie in Projektmappen-Explorer aus, und ändern Sie dann im Eigenschaftenfenster die Eigenschaft "Buildaktion" von "Inhalt" in "Keine". (Die Transformationsdateien, die auf Buildkonfigurationen basieren, werden automatisch daran gehindert, bereitgestellt zu werden.)
Sie können jetzt Web.config-Transformationen in die Web.config-Transformationsdateien eingeben.
Einschränken des Fehlerprotokollzugriffs auf Administratoren
Wenn während der Ausführung der Anwendung ein Fehler auftritt, zeigt die Anwendung anstelle der vom System generierten Fehlerseite eine generische Fehlerseite an und verwendet das Elmah NuGet-Paket für die Fehlerprotokollierung und -berichterstellung. Das customErrors Element in der Datei "Web.config " gibt die Fehlerseite an:
<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
<error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>
Um die Fehlerseite anzuzeigen, ändern Sie vorübergehend das mode-Attribut des customErrors-Elements von "RemoteOnly" auf "On" und führen Sie die Anwendung in Visual Studio aus. Einen Fehler verursachen, indem eine ungültige URL angefordert wird, z. B. Studentsxxx.aspx. Anstelle einer von IIS generierten Fehlerseite "Seite nicht gefunden" wird die GenericErrorPage.aspx Seite angezeigt.
Um das Fehlerprotokoll anzuzeigen, ersetzen Sie alles in der URL nach der Portnummer durch elmah.axd (z. B. im Screenshot http://localhost:51130/elmah.axd), und drücken Sie die EINGABETASTE:
Vergessen Sie nicht, das customErrors Element wieder auf den "RemoteOnly"-Modus festzulegen, wenn Sie fertig sind.
Auf Ihrem Entwicklungscomputer ist es praktisch, den kostenlosen Zugriff auf die Fehlerprotokollseite zu ermöglichen, aber in der Produktion wäre dies ein Sicherheitsrisiko. Für die Produktionswebsite können Sie eine Autorisierungsregel hinzufügen, die den Fehlerprotokollzugriff nur auf Administratoren einschränkt, indem Sie eine Transformation in der Datei "Web.Production.config " konfigurieren.
Öffnen Sie Web.Production.config , und fügen Sie ein neues location Element unmittelbar nach dem öffnenden configuration Tag hinzu, wie hier gezeigt. (Stellen Sie sicher, dass Sie nur das location Element und nicht das umgebende Markup hinzufügen, das hier nur angezeigt wird, um einen bestimmten Kontext bereitzustellen.)
<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>
Der Transform Attributwert von "Insert" bewirkt, dass dieses location Element als gleichgeordnetes Element zu allen vorhandenen location Elementen in der Datei "Web.config " hinzugefügt wird. (Es gibt bereits ein location Element, das Autorisierungsregeln für die Seite "Guthaben aktualisieren" angibt.) Wenn Sie die Produktionswebsite nach der Bereitstellung testen, testen Sie, ob diese Autorisierungsregel wirksam ist.
Sie müssen den Fehlerprotokollzugriff in der Testumgebung nicht einschränken, sodass Sie diesen Code nicht der Datei "Web.Test.config " hinzufügen müssen.
Hinweis
Sicherheitshinweis Zeigen Sie niemals Fehlerdetails der Öffentlichkeit in einer Produktionsanwendung und speichern Sie diese Angaben nicht an einem öffentlichem Zugriff. Angreifer können Fehlerinformationen verwenden, um Sicherheitsrisiken auf einer Website zu ermitteln. Wenn Sie ELMAH in Ihrer eigenen Anwendung verwenden, sollten Sie prüfen, wie ELMAH konfiguriert werden kann, um Sicherheitsrisiken zu minimieren. Das ELMAH-Beispiel in diesem Lernprogramm sollte nicht als empfohlene Konfiguration betrachtet werden. Es ist ein Beispiel, das ausgewählt wurde, um zu veranschaulichen, wie ein Ordner behandelt wird, in dem die Anwendung Dateien erstellen kann.
Festlegen eines Umgebungsindikators
Häufig müssen die Einstellungen der Web.config-Datei in jeder Zielumgebung, in der Sie diese bereitstellen, unterschiedlich sein. Beispielsweise benötigt eine Anwendung, die einen WCF-Dienst aufruft, möglicherweise einen anderen Endpunkt in Test- und Produktionsumgebungen. Die Contoso University-Anwendung enthält auch eine Einstellung dieser Art. Diese Einstellung steuert einen sichtbaren Indikator auf den Seiten einer Website, die Ihnen angibt, in welcher Umgebung Sie sich befinden, z. B. Entwicklung, Test oder Produktion. Der Einstellungswert bestimmt, ob die Anwendung "(Dev)" oder "(Test)" an die Hauptüberschrift auf der Masterseite "Site.Master" anfügen soll.
Der Umgebungsindikator wird ausgelassen, wenn die Anwendung in der Produktion ausgeführt wird.
Die Webseiten der Contoso University lesen einen Wert, der in appSettings der Datei "Web.config " festgelegt ist, um zu bestimmen, in welcher Umgebung die Anwendung ausgeführt wird:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
Der Wert sollte in der Testumgebung "Test" sein und in der Produktionsumgebung "Prod".
Öffnen Sie Web.Production.config und fügen Sie ein appSettings-Element unmittelbar vor dem öffnenden Tag des zuvor hinzugefügten location-Elements hinzu.
<appSettings>
<add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Der xdt:Transform Attributwert "SetAttributes" gibt an, dass der Zweck dieser Transformation das Ändern von Attributwerten eines vorhandenen Elements in der Web.config-Datei ist. Der xdt:Locator Attributwert "Match(key)" gibt an, dass das zu ändernde Element das Attribut ist, dessen key Attribut dem key hier angegebenen Attribut entspricht. Das einzige andere Attribut des add Elements ist value, und das ist, was in der bereitgestellten Web.config-Datei geändert wird. Dieser Code bewirkt, dass das value Attribut des EnvironmentappSettings Elements in der Web.config-Datei, die für die Produktion bereitgestellt wird, auf "Prod" festgelegt wird.
Wenden Sie als Nächstes dieselbe Änderung auf die Datei Web.Test.config an. Stellen Sie dabei value auf "Test" anstelle von "Prod" ein. Wenn Sie fertig sind, sieht der appSettings Abschnitt in Web.Test.config wie im folgenden Beispiel aus:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Deaktivieren des Debugmodus
Für einen Release-Build möchten Sie, dass das Debuggen unabhängig davon, für welche Umgebung Sie bereitstellen, nicht aktiviert ist. Standardmäßig wird die Transformationsdatei "Web.Release.config " automatisch mit Code erstellt, der das debug Attribut aus dem compilation Element entfernt:
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
Das Transform Attribut bewirkt, dass das debug Attribut bei jeder Bereitstellung eines Releasebuilds aus der bereitgestellten Web.config-Datei weggelassen wird.
Diese Transformation befindet sich in Test- und Production-Transformationsdateien, da Sie sie durch Kopieren der Releasetransformationsdatei erstellt haben. Sie benötigen es dort nicht dupliziert. Öffnen Sie also jede dieser Dateien, entfernen Sie das Kompilierung-Element, und speichern und schließen Sie jede Datei.
Festlegen von Verbindungszeichenfolgen
In den meisten Fällen müssen Sie keine Transformationen von Verbindungszeichenfolgen einrichten, da Sie die Verbindungszeichenfolge im Veröffentlichungsprofil festlegen können. Es gibt jedoch eine Ausnahme, wenn Sie eine SQL Server Compact-Datenbank bereitstellen und Entity Framework Code First-Migrationen verwenden, um die Datenbank auf dem Zielserver zu aktualisieren. Für dieses Szenario müssen Sie eine zusätzliche Verbindungszeichenfolge angeben, die auf dem Server zum Aktualisieren des Datenbankschemas verwendet wird. Um diese Transformation einzurichten, fügen Sie ein <connectionStrings>-Element unmittelbar nach dem öffnenden <Konfiguration>-Tag in den Transformationsdateien "Web.Test.config" und "Web.Production.config" hinzu.
<connectionStrings>
<add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>
Das Transform Attribut gibt an, dass diese Verbindungszeichenfolge dem connectionStrings-Element in der bereitgestelltenWeb.config-Datei hinzugefügt wird. (Der Veröffentlichungsprozess erstellt diese zusätzliche Verbindungszeichenfolge automatisch für Sie, wenn er nicht vorhanden ist, aber standardmäßig wird das ProviderName-Attribut auf System.Data.SqlClientfestgelegt, das für SQL Server Compact nicht funktioniert. Durch manuelles Hinzufügen der Verbindungszeichenfolge können Sie den Bereitstellungsprozess daran hindern, ein Verbindungszeichenfolge Element mit dem falschen Anbieternamen zu erstellen.)
Sie haben nun alle Web.config-Transformationen angegeben, die Sie für die Bereitstellung der Contoso University-Anwendung zum Testen und Zur Produktion benötigen. Im folgenden Anleitungsdokument kümmern Sie sich um Aufgaben zur Einrichtung der Bereitstellung, die das Festlegen von Projekteigenschaften erfordern.
Weitere Informationen:
Weitere Informationen zu den in diesem Lernprogramm behandelten Themen finden Sie im Abschnitt zur Web.config-Transformation in der ASP.NET Bereitstellungsinhaltsübersicht.