Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
door Tom Dykstra
Deze reeks zelfstudies laat zien hoe u een ASP.NET-webtoepassing implementeert (publiceert) naar Azure App Service Web Apps of naar een externe hostingprovider met behulp van Visual Studio 2012 of Visual Studio 2010. Zie de eerste zelfstudie in de reeks voor meer informatie over de reeks.
Overzicht
In deze zelfstudie leert u hoe u het proces voor het wijzigen van het Web.config-bestand automatiseert wanneer u het implementeert in verschillende doelomgevingen. De meeste toepassingen hebben instellingen in het Web.config-bestand dat anders moet zijn wanneer de toepassing wordt geïmplementeerd. Door het proces van het aanbrengen van deze wijzigingen te automatiseren, hoeft u ze niet telkens handmatig uit te voeren wanneer u implementeert, wat tijdrovend en foutgevoelig zou zijn.
Herinnering: Als u een foutbericht krijgt of iets niet werkt terwijl u de zelfstudie doorloopt, controleert u de pagina voor probleemoplossing.
Web.config transformaties versus parameters voor Web Deploy
Er zijn twee manieren om het proces van het wijzigen van Web.config bestandsinstellingen te automatiseren:Web.config transformaties en parameters voor Web Deploy. Een Web.config transformatiebestand bevat XML-markeringen waarmee wordt aangegeven hoe u het Web.config bestand wijzigt wanneer het wordt geïmplementeerd. U kunt verschillende wijzigingen opgeven voor specifieke buildconfiguraties en voor specifieke publicatieprofielen. De standaard buildconfiguraties zijn Foutopsporing en Release en u kunt aangepaste buildconfiguraties maken. Een publicatieprofiel komt meestal overeen met een doelomgeving. (Meer informatie over het publiceren van profielen vindt u in de zelfstudie Implementeren naar IIS als testomgeving .)
Parameters voor webimplementatie kunnen worden gebruikt om veel verschillende soorten instellingen op te geven die tijdens de implementatie moeten worden geconfigureerd, inclusief instellingen die in Web.config bestanden worden gevonden. Wanneer u gebruikt om Web.config bestandswijzigingen op te geven, zijn web-implementatieparameters complexer om in te stellen, maar ze zijn handig wanneer u de waarde die moet worden ingesteld niet weet totdat u implementeert. In een bedrijfsomgeving kunt u bijvoorbeeld een implementatiepakket maken en het aan een persoon op de IT-afdeling geven om in productie te installeren en die persoon moet verbindingstekenreeksen of wachtwoorden kunnen invoeren die u niet kent.
Voor het scenario dat in deze reeks zelfstudies wordt behandeld, weet u van tevoren alles wat moet worden gedaan met het Web.config-bestand , dus u hoeft geen parameters voor Web Deploy te gebruiken. U configureert enkele transformaties die verschillen, afhankelijk van de gebruikte buildconfiguratie en sommige die verschillen, afhankelijk van het gebruikte publicatieprofiel.
Instellingen voor Web.config opgeven in Azure
Als de Web.config bestandsinstellingen die u wilt wijzigen zich in het <connectionStrings> element of het <appSettings> element bevinden en als u implementeert in Web Apps in Azure App Service, hebt u een andere optie voor het automatiseren van wijzigingen tijdens de implementatie. U kunt de instellingen invoeren die u wilt toepassen in Azure op het tabblad Configureren van de pagina Beheerportal voor uw web-app (schuif omlaag naar de secties app-instellingen en verbindingsreeksen ). Wanneer u het project implementeert, worden de wijzigingen automatisch toegepast in Azure. Zie Windows Azure-websites voor meer informatie: hoe toepassingsreeksen en verbindingsreeksen werken.
Standaardtransformatiebestanden
Vouw in Solution ExplorerWeb.config uit om de Web.Debug.config- en Web.Release.config transformatiebestanden te zien die standaard zijn gemaakt voor de twee standaard buildconfiguraties.
U kunt transformatiebestanden maken voor aangepaste buildconfiguraties door met de rechtermuisknop op het Web.config-bestand te klikken en configuratietransformaties toe te voegen in het contextmenu. Voor deze zelfstudie hoeft u dat niet te doen en de menuoptie is uitgeschakeld, omdat u geen aangepaste buildconfiguraties hebt gemaakt.
Later maakt u nog drie transformatiebestanden, één voor de test-, faserings- en productiepublicatieprofielen. Een typisch voorbeeld van een instelling die u zou verwerken in een publicatieprofieltransformatie bestand, omdat dit afhankelijk is van de doelomgeving, is een WCF-eindpunt dat verschilt tussen test en productie. In latere tutorials maakt u publicatieprofieltransformatiebestanden nadat u de bijbehorende publicatieprofielen hebt gemaakt.
Foutopsporingsmodus uitschakelen
Een voorbeeld van een instelling die afhankelijk is van de buildconfiguratie in plaats van de doelomgeving, is het debug kenmerk. Voor een release-build wilt u doorgaans dat foutopsporing is uitgeschakeld, ongeacht in welke omgeving u implementeert. Daarom maken de Visual Studio-projectsjablonen standaard Web.Release.config transformatiebestanden aan die code bevatten waarmee het attribuut debug uit het element compilation wordt verwijderd. Dit is de standaard Web.Release.config: naast een voorbeeldtransformatiecode die als commentaar wordt toegevoegd, bevat het code in het compilation element waarmee het debug kenmerk wordt verwijderd:
<?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>
Het xdt:Transform="RemoveAttributes(debug)" kenmerk geeft aan dat u het debug kenmerk wilt verwijderen uit het system.web/compilation element in het geïmplementeerdeWeb.config-bestand . Dit gebeurt telkens wanneer u een release-build implementeert.
Toegang tot foutenlogboeken beperken tot beheerders
Als er een fout optreedt tijdens het uitvoeren van de toepassing, wordt in de toepassing een algemene foutpagina weergegeven in plaats van de door het systeem gegenereerde foutpagina en wordt het Elmah NuGet-pakket gebruikt voor foutlogboeken en -rapportage. Het customErrors element in het Web.config-bestand van de toepassing geeft de foutpagina op:
<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
<error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>
Als u de foutpagina wilt zien, wijzigt u tijdelijk het mode kenmerk van het customErrors element van RemoteOnly in 'Aan' en voert u de toepassing uit vanuit Visual Studio. Een fout veroorzaken door een ongeldige URL aan te vragen, zoals Studentsxxx.aspx. In plaats van een door IIS gegenereerde foutpagina 'De resource kan niet worden gevonden' ziet u de GenericErrorPage.aspx pagina.
Als u het foutenlogboek wilt zien, vervangt u alles in de URL na het poortnummer door elmah.axd (bijvoorbeeld http://localhost:51130/elmah.axd) en drukt u op Enter:
Vergeet niet om het element customErrors weer in de modus "RemoteOnly" in te stellen wanneer u klaar bent.
Op uw ontwikkelcomputer is het handig om gratis toegang tot de foutlogboekpagina toe te staan, maar in productie dat een beveiligingsrisico zou zijn. Voor de productiesite wilt u een autorisatieregel toevoegen die de toegang tot de foutenlogbestanden beperkt voor beheerders. Om te controleren of deze beperking werkt, wilt u deze ook toepassen in de test- en staging-omgeving. Daarom is dit een andere wijziging die u wilt implementeren telkens wanneer u een release-build implementeert, en dus behoort deze tot het Web.Release.config-bestand .
Open Web.Release.config en voeg direct vóór de afsluitende location tag een nieuw configuration element toe, zoals hier wordt weergegeven.
<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>
De Transform kenmerkwaarde 'Invoegen' zorgt ervoor dat dit location element als hetzelfde element wordt toegevoegd aan bestaande location elementen in het Web.config-bestand . (Er is al één location element dat autorisatieregels opgeeft voor de pagina Updatetegoeden .)
U kunt nu een voorbeeld van de transformatie bekijken om ervoor te zorgen dat u deze correct hebt gecodeerd.
Klik in Solution Explorer met de rechtermuisknop op Web.Release.config en klik op Voorbeeldtransformatie.
Er wordt een pagina geopend met het ontwikkelingsbestand Web.config aan de linkerkant en hoe het geïmplementeerdeWeb.config-bestand er aan de rechterkant uitziet, met wijzigingen gemarkeerd.
(In de preview ziet u mogelijk enkele aanvullende wijzigingen waarvoor u geen transformaties hebt geschreven: deze omvatten meestal het verwijderen van witruimte die geen invloed heeft op de functionaliteit.)
Wanneer u de site na de implementatie test, test u ook of de autorisatieregel van kracht is.
Opmerking
Beveiligingsnotitie Geef nooit foutdetails weer aan het publiek in een productietoepassing of sla die informatie op een openbare locatie op. Aanvallers kunnen foutinformatie gebruiken om beveiligingsproblemen op een site te detecteren. Als u ELMAH in uw eigen toepassing gebruikt, configureert u ELMAH om beveiligingsrisico's te minimaliseren. Het ELMAH-voorbeeld in deze zelfstudie mag niet worden beschouwd als een aanbevolen configuratie. Het is een voorbeeld dat is gekozen om te laten zien hoe u een map verwerkt waarin de toepassing bestanden moet kunnen maken. Zie Het ELMAH-eindpunt beveiligen voor meer informatie.
Een instelling die u gaat afhandelen in het publiceren van profieltransformatiebestanden
Een veelvoorkomend scenario is het hebben vanWeb.config bestandsinstellingen die moeten verschillen in elke omgeving waarin u implementeert. Een toepassing die een WCF-service aanroept, heeft bijvoorbeeld mogelijk een ander eindpunt nodig in test- en productieomgevingen. De Contoso University-toepassing bevat ook een instelling van dit type. Deze instelling bepaalt een zichtbare indicator op de pagina's van een site die aangeeft in welke omgeving u zich bevindt, zoals ontwikkeling, test of productie. De instellingswaarde bepaalt of de toepassing '(Dev)' of '(Test)' toevoegt aan de hoofdkop op de basispagina van Site.Master :
De omgevingsindicator wordt weggelaten wanneer de toepassing wordt uitgevoerd in fasering of productie.
De webpagina's van Contoso University lezen een waarde die is ingesteld in appSettings het bestandWeb.config om te bepalen in welke omgeving de toepassing wordt uitgevoerd:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
De waarde moet 'Testen' zijn in de testomgeving en 'Prod' voor fasering en productie.
Met de volgende code in een transformatiebestand wordt deze transformatie geïmplementeerd:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
De xdt:Transform kenmerkwaarde 'SetAttributes' geeft aan dat het doel van deze transformatie is het wijzigen van kenmerkwaarden van een bestaand element in het Web.config bestand. De xdt:Locator kenmerkwaarde 'Match(key)' geeft aan dat het element dat moet worden gewijzigd, het element is waarvan key het kenmerk overeenkomt met het key kenmerk dat hier is opgegeven. Het enige andere kenmerk van het add element is value, en dat is wat wordt gewijzigd in het geïmplementeerdeWeb.config-bestand . De code die hier wordt weergegeven, zorgt ervoor dat het value kenmerk van het EnvironmentappSettings element wordt ingesteld op 'Testen' in het Web.config-bestand dat is geïmplementeerd.
Deze transformatie behoort tot de transformatiebestanden van het publicatieprofiel, die u nog niet hebt gemaakt. U maakt en werkt de transformatiebestanden bij die deze wijziging implementeren wanneer u de publicatieprofielen voor de test-, faserings- en productieomgevingen maakt. U doet dit in de uitrol naar IIS en tutorials over het uitrollen naar productie.
Opmerking
Omdat deze instelling zich in het <appSettings> element bevindt, hebt u een ander alternatief voor het opgeven van de transformatie wanneer u implementeert in Web Apps in Azure App Service Zie Opgeven Web.config instellingen in Azure eerder in dit onderwerp.
Verbindingsreeksen instellen
Hoewel het standaardtransformatiebestand een voorbeeld bevat dat laat zien hoe u een verbindingsreeks bijwerkt, hoeft u in de meeste gevallen geen verbindingsreekstransformaties in te stellen, omdat u verbindingsreeksen in het publicatieprofiel kunt opgeven. Je doet dit in de implementatie naar IIS en implementatie in productie-tutorials.
Overzicht
U hebt nu zoveel mogelijk gedaan met Web.config transformaties voordat u de publicatieprofielen maakt en u hebt een voorbeeld gezien van wat er in het geïmplementeerde Web.config-bestand wordt weergegeven.
In de volgende handleiding draagt u zorg voor de implementatie-instellingen waarvoor de projecteigenschappen moeten worden ingesteld.
Meer informatie
Zie Web.config-transformaties gebruiken om instellingen te wijzigen in het doel-Web.config-bestand of app.config-bestand tijdens de implementatie in de Web Deployment Content Map voor Visual Studio en ASP.NET voor meer informatie over onderwerpen die in deze zelfstudie worden besproken.