Konfigurowanie parametrów na potrzeby wdrożenia pakietu internetowego
Autor : Jason Lee
W tym temacie opisano sposób ustawiania wartości parametrów, takich jak nazwy aplikacji internetowych usług Internet Information Services (IIS), parametry połączenia i punkty końcowe usługi podczas wdrażania pakietu internetowego na zdalnym serwerze sieci Web usług IIS.
Podczas tworzenia projektu aplikacji internetowej proces kompilowania i pakowania generuje trzy kluczowe pliki:
- Plik [nazwa projektu].zip . Jest to pakiet wdrożeniowy sieci Web dla projektu aplikacji internetowej. Ten pakiet zawiera wszystkie zestawy, pliki, skrypty bazy danych i zasoby wymagane do ponownego utworzenia aplikacji internetowej na zdalnym serwerze internetowym usług IIS.
- Plik [nazwa projektu].deploy.cmd . Zawiera zestaw sparametryzowanych poleceń web deploy (MSDeploy.exe), które publikują pakiet wdrożeniowy w Internecie na zdalnym serwerze sieci Web usług IIS.
- Plik [nazwa projektu].SetParameters.xml . Zapewnia to zestaw wartości parametrów do polecenia MSDeploy.exe. Możesz zaktualizować wartości w tym pliku i przekazać je do narzędzia Web Deploy jako parametr wiersza polecenia podczas wdrażania pakietu internetowego.
Uwaga
Aby uzyskać więcej informacji na temat procesu kompilowania i tworzenia pakietów, zobacz Building and Packaging Web Application Projects (Tworzenie i pakowanie projektów aplikacji internetowych).
Plik SetParameters.xml jest dynamicznie generowany na podstawie pliku projektu aplikacji internetowej i wszystkich plików konfiguracji w projekcie. Podczas kompilowania i tworzenia pakietu projektu potok publikowania sieci Web (WPP) automatycznie wykryje wiele zmiennych, które mogą ulec zmianie między środowiskami wdrażania, takimi jak docelowa aplikacja internetowa usług IIS i wszystkie parametry połączenia bazy danych. Te wartości są automatycznie sparametryzowane w pakiecie wdrażania sieci Web i dodawane do pliku SetParameters.xml . Jeśli na przykład dodasz parametry połączenia do pliku web.config w projekcie aplikacji internetowej, proces kompilacji wykryje tę zmianę i odpowiednio doda wpis do pliku SetParameters.xml .
W wielu przypadkach ta automatyczna parametryzacja będzie wystarczająca. Jeśli jednak użytkownicy muszą różnić inne ustawienia między środowiskami wdrażania, takimi jak ustawienia aplikacji lub adresy URL punktów końcowych usługi, musisz poinformować program WPP, aby sparametryzować te wartości w pakiecie wdrożeniowym i dodać odpowiednie wpisy do pliku SetParameters.xml . W poniższych sekcjach wyjaśniono, jak to zrobić.
Automatyczna parametryzacja
Podczas tworzenia i tworzenia pakietu aplikacji internetowej program WPP automatycznie sparametryzuje następujące elementy:
- Docelowa ścieżka i nazwa aplikacji internetowej usług IIS.
- Wszystkie parametry połączenia w pliku web.config .
- Parametry połączenia dla wszystkich baz danych dodanych do karty Package/Publish SQL na stronach właściwości projektu.
Na przykład jeśli chcesz skompilować i spakować przykładowe rozwiązanie Contact Manager bez dotykania procesu parametryzacji w jakikolwiek sposób, program WPP wygeneruje ten plik ContactManager.Mvc.SetParameters.xml :
<parameters>
<setParameter
name="IIS Web Application Name"
value="Default Web Site/ContactManager.Mvc_deploy" />
<setParameter
name="ApplicationServices-Web.config Connection String"
value="Data Source=DEVWORKSTATION\SQLEXPRESS;Initial Catalog=CMAppServices;
Integrated Security=true;" />
</parameters>
W takim przypadku:
- Parametr Nazwa aplikacji internetowej usług IIS to ścieżka usług IIS, w której chcesz wdrożyć aplikację internetową. Wartość domyślna jest pobierana ze strony sieci Web Package/Publish na stronach właściwości projektu.
- Parametr parametrów połączeniaApplicationServices-Web.config został wygenerowany na podstawie elementu connectionStrings/add w pliku web.config . Reprezentuje on parametry połączenia, których aplikacja powinna używać do kontaktowania się z bazą danych członkostwa. W tym miejscu wartość zostanie zastąpiona wdrożonym plikiem web.config . Wartość domyślna jest pobierana z pliku web.config przed wdrożeniem.
Program WPP sparametryzuje również te właściwości w generowanym pakiecie wdrożeniowym. Podczas instalowania pakietu wdrożeniowego można podać wartości tych właściwości. Jeśli pakiet zostanie zainstalowany ręcznie za pośrednictwem Menedżera usług IIS, zgodnie z opisem w temacie Ręczne instalowanie pakietów sieci Web, kreator instalacji wyświetli monit o podanie wartości dla dowolnych parametrów. Jeśli pakiet zostanie zainstalowany zdalnie przy użyciu pliku .deploy.cmd zgodnie z opisem w temacie Wdrażanie pakietów sieci Web, narzędzie Web Deploy będzie szukać tego pliku SetParameters.xml , aby podać wartości parametrów. Wartości w pliku SetParameters.xml można edytować ręcznie lub dostosować plik w ramach zautomatyzowanego procesu kompilacji i wdrażania. Ten proces został szczegółowo opisany w dalszej części tego tematu.
Parametryzacja niestandardowa
W bardziej złożonych scenariuszach wdrażania często należy sparametryzować dodatkowe właściwości przed wdrożeniem projektu. Ogólnie rzecz biorąc, należy sparametryzować wszelkie właściwości i ustawienia, które będą się różnić między środowiskami docelowymi. Mogą to być następujące strategie:
- Punkty końcowe usługi w pliku web.config .
- Ustawienia aplikacji w pliku web.config .
- Wszelkie inne właściwości deklaratywne, które mają monitować użytkowników o określenie.
Najprostszym sposobem sparametryzowania tych właściwości jest dodanie pliku parameters.xml do folderu głównego projektu aplikacji internetowej. Na przykład w rozwiązaniu Contact Manager projekt ContactManager.Mvc zawiera plik parameters.xml w folderze głównym.
Jeśli otworzysz ten plik, zobaczysz, że zawiera on pojedynczy wpis parametru . Wpis używa zapytania języka XPath (XML Path Language), aby zlokalizować i sparametryzować adres URL punktu końcowego usługi ContactService Windows Communication Foundation (WCF) w pliku web.config .
<parameters>
<parameter name="ContactService Service Endpoint Address"
description="Specify the endpoint URL for the ContactService WCF
service in the destination environment"
defaultValue="http://localhost/ContactManagerService">
<parameterEntry kind="XmlFile" scope="Web.config"
match="/configuration/system.serviceModel/client
/endpoint[@name='BasicHttpBinding_IContactService']
/@address" />
</parameter>
</parameters>
Oprócz parametryzacji adresu URL punktu końcowego w pakiecie wdrożeniowym program WPP dodaje również odpowiedni wpis do pliku SetParameters.xml , który jest generowany wraz z pakietem wdrożeniowym.
<parameters>
...
<setParameter
name="ContactService Service Endpoint Address"
value="http://localhost/ContactManagerService" />
...
</parameters>
Jeśli pakiet wdrożeniowy zostanie zainstalowany ręcznie, Menedżer usług IIS wyświetli monit o podanie adresu punktu końcowego usługi wraz z właściwościami, które zostały sparametryzowane automatycznie. Jeśli zainstalujesz pakiet wdrożeniowy, uruchamiając plik .deploy.cmd , możesz edytować plik SetParameters.xml , aby podać wartość adresu punktu końcowego usługi wraz z wartościami właściwości, które zostały sparametryzowane automatycznie.
Aby uzyskać szczegółowe informacje na temat tworzenia pliku parameters.xml , zobacz Instrukcje: używanie parametrów do konfigurowania ustawień wdrażania po zainstalowaniu pakietu. Procedura o nazwie Aby używać parametrów wdrożenia dla ustawień pliku Web.config zawiera instrukcje krok po kroku.
Modyfikowanie pliku SetParameters.xml
Jeśli planujesz ręcznie wdrożyć pakiet aplikacji internetowej — uruchamiając plik .deploy.cmd lub uruchamiając MSDeploy.exe z wiersza polecenia — nie ma nic do zatrzymania ręcznego edytowania pliku SetParameters.xml przed wdrożeniem. Jeśli jednak pracujesz nad rozwiązaniem w skali przedsiębiorstwa, może być konieczne wdrożenie pakietu aplikacji internetowej w ramach większego, zautomatyzowanego procesu kompilowania i wdrażania. W tym scenariuszu potrzebujesz Microsoft Build Engine (MSBuild), aby zmodyfikować plik SetParameters.xml. Można to zrobić za pomocą zadania MSBuild XmlPoke .
Przykładowe rozwiązanie Contact Manager ilustruje ten proces. Poniższe przykłady kodu zostały edytowane, aby pokazać tylko szczegóły, które są istotne dla tego przykładu.
Uwaga
Aby zapoznać się z szerszym omówieniem modelu plików projektu w przykładowym rozwiązaniu i ogólnym wprowadzeniem do niestandardowych plików projektu, zobacz Understanding the Project File and Understanding the Build Process (Omówienie pliku projektu i opis procesu kompilacji).
Najpierw interesujące wartości parametrów są definiowane jako właściwości w pliku projektu specyficznym dla środowiska (na przykład Env-Dev.proj).
<PropertyGroup>
<ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
DemoSite/ContactManager
</ContactManagerIisPath>
<ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
http://localhost:85/ContactManagerService/ContactService.svc
</ContactManagerTargetUrl>
<MembershipConnectionString Condition=" '$(MembershipConnectionString)'=='' ">
Data Source=TESTDB1;Integrated Security=true;Initial Catalog=CMAppServices
</MembershipConnectionString>
</PropertyGroup>
Uwaga
Aby uzyskać wskazówki dotyczące dostosowywania plików projektu specyficznych dla środowiska dla własnych środowisk serwerowych, zobacz Konfigurowanie właściwości wdrożenia dla środowiska docelowego.
Następnie plik Publish.proj importuje te właściwości. Ponieważ każdy plik SetParameters.xml jest skojarzony z plikiem .deploy.cmd i ostatecznie chcemy, aby plik projektu wywoływać każdy plik .deploy.cmd , plik projektu tworzy element MSBuild dla każdego pliku .deploy.cmd i definiuje właściwości zainteresowania jako metadane elementu.
<ItemGroup>
<PublishPackages Include="$(_ContactManagerDest)ContactManager.Mvc.deploy.cmd">
<ParametersXml>
$(_ContactManagerDest)ContactManager.Mvc.SetParameters.xml
</ParametersXml>
<IisWebAppName>
$(ContactManagerIisPath)
</IisWebAppName>
<MembershipDBConnectionName>
ApplicationServices-Web.config Connection String
</MembershipDBConnectionName>
<MembershipDBConnectionString>
$(MembershipConnectionString.Replace(";","%3b"))
</MembershipDBConnectionString>
<ServiceEndpointParamName>
ContactService Service Endpoint Address
</ServiceEndpointParamName>
<ServiceEndpointValue>
$(ContactManagerTargetUrl)
</ServiceEndpointValue>
</PublishPackages>
...
</ItemGroup>
W takim przypadku:
- Wartość metadanych ParametersXml wskazuje lokalizację pliku SetParameters.xml .
- Wartość IisWebAppName to ścieżka usług IIS, do której chcesz wdrożyć aplikację internetową.
- Wartość MembershipDBConnectionString jest parametrami połączenia dla bazy danych członkostwa, a wartość MembershipDBConnectionName jest atrybutem nazwy odpowiedniego parametru w pliku SetParameters.xml .
- Wartość ServiceEndpointValue jest adresem punktu końcowego dla usługi WCF na serwerze docelowym, a wartość ServiceEndpointParamName jest atrybutem nazwy odpowiedniego parametru w pliku SetParameters.xml .
Na koniec w pliku Publish.proj obiekt docelowy PublishWebPackages używa zadania XmlPoke do modyfikowania tych wartości w pliku SetParameters.xml .
<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter[@name='%(PublishPackages.ConnectionName)']
/@value"
Value="%(PublishPackages.ConnectionString)"
Condition =" '%(PublishPackages.ConnectionName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter
[@name='%(PublishPackages.MembershipDBConnectionName)']/@value"
Value='%(PublishPackages.MembershipDBConnectionString)'
Condition =" '%(PublishPackages.MembershipDBConnectionName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter[@name='IIS Web Application Name']/@value"
Value="%(PublishPackages.IisWebAppName)"
Condition =" '%(PublishPackages.IisWebAppName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter
[@name='%(PublishPackages.ServiceEndpointParamName)']/@value"
Value="%(PublishPackages.ServiceEndpointValue)"
Condition =" '%(PublishPackages.ServiceEndpointParamName)'!=''"
/>
<!--Execute the .deploy.cmd file-->
...
</Target>
Zauważysz, że każde zadanie XmlPoke określa cztery wartości atrybutów:
- Atrybut XmlInputPath informuje zadanie o miejscu znalezienia pliku, który chcesz zmodyfikować.
- Atrybut Query to zapytanie XPath, które identyfikuje węzeł XML, który chcesz zmienić.
- Atrybut Value to nowa wartość, którą chcesz wstawić do wybranego węzła XML.
- Atrybut Warunek to kryteria, na których zadanie powinno być uruchamiane lub nie jest uruchamiane. W takich przypadkach warunek gwarantuje, że nie próbujesz wstawić wartości null lub pustej do pliku SetParameters.xml .
Podsumowanie
W tym temacie opisano rolę pliku SetParameters.xml i wyjaśniono, jak jest on generowany podczas tworzenia projektu aplikacji internetowej. Wyjaśniono, jak można sparametryzować dodatkowe ustawienia, dodając plik parameters.xml do projektu. Opisano w nim również sposób modyfikowania pliku SetParameters.xml w ramach większego, zautomatyzowanego procesu kompilacji przy użyciu zadania XmlPoke w plikach projektu.
W następnym temacie Wdrażanie pakietów sieci Web opisano sposób wdrażania pakietu internetowego przez uruchomienie pliku .deploy.cmd lub bezpośrednie użycie poleceń MSDeploy.exe. W obu przypadkach możesz określić plik SetParameters.xml jako parametr wdrożenia.
Dalsze informacje
Aby uzyskać informacje na temat tworzenia pakietów internetowych, zobacz Tworzenie i tworzenie projektów aplikacji internetowych. Aby uzyskać wskazówki dotyczące rzeczywistego wdrażania pakietu internetowego, zobacz Wdrażanie pakietów internetowych. Aby zapoznać się z instrukcjami krok po kroku dotyczącymi tworzenia pliku parameters.xml, zobacz How to: Use Parameters to Configure Deployment Settings When a Package is Installed (Instrukcje: konfigurowanie ustawień wdrażania podczas instalowania pakietu).
Aby uzyskać więcej ogólnych informacji na temat parametryzacji w narzędziu Web Deploy, zobacz Web Deploy Parameterization in Action (Parametryzacja w narzędziu Web Deploy w akcji ) (wpis w blogu).