Condividi tramite


Configurazione dei parametri per la distribuzione di pacchetti Web

di Jason Lee

In questo argomento viene descritto come impostare i valori dei parametri, ad esempio i nomi delle applicazioni Web Internet Information Services (IIS), le stringhe di connessione e gli endpoint di servizio, quando si distribuisce un pacchetto Web in un server Web IIS remoto.

Quando si compila un progetto di applicazione Web, il processo di compilazione e creazione di pacchetti genera tre file chiave:

  • Un file [nome progetto].zip . Questo è il pacchetto di distribuzione Web per il progetto dell'applicazione Web. Questo pacchetto contiene tutti gli assembly, i file, gli script di database e le risorse necessari per ricreare l'applicazione Web in un server Web IIS remoto.
  • Un file [nome progetto].deploy.cmd . Contiene un set di comandi di distribuzione Web con parametri (MSDeploy.exe) che pubblicano il pacchetto di distribuzione Web in un server Web IIS remoto.
  • Un file [nome progetto].SetParameters.xml . In questo modo viene fornito un set di valori di parametro al comando MSDeploy.exe. È possibile aggiornare i valori in questo file e passarlo a Distribuzione Web come parametro della riga di comando quando si distribuisce il pacchetto Web.

Nota

Per altre informazioni sul processo di compilazione e creazione di pacchetti, vedere Compilazione e creazione di pacchetti di progetti di applicazioni Web.

Il file SetParameters.xml viene generato dinamicamente dal file di progetto dell'applicazione Web e da eventuali file di configurazione all'interno del progetto. Quando si compila e si crea il pacchetto del progetto, la pipeline di pubblicazione Web rileva automaticamente molte variabili che probabilmente cambiano tra gli ambienti di distribuzione, ad esempio l'applicazione Web IIS di destinazione e tutte le stringhe di connessione del database. Questi valori vengono automaticamente parametrizzati nel pacchetto di distribuzione Web e aggiunti al file SetParameters.xml . Ad esempio, se si aggiunge una stringa di connessione al file web.config nel progetto dell'applicazione Web, il processo di compilazione rileverà questa modifica e aggiungerà di conseguenza una voce al file SetParameters.xml .

In molti casi, questa parametrizzazione automatica sarà sufficiente. Tuttavia, se gli utenti devono variare altre impostazioni tra gli ambienti di distribuzione, ad esempio le impostazioni dell'applicazione o gli URL degli endpoint di servizio, è necessario indicare a WPP di parametrizzare questi valori nel pacchetto di distribuzione e aggiungere voci corrispondenti al file diSetParameters.xml . Le sezioni seguenti illustrano come eseguire questa operazione.

Parametrizzazione automatica

Quando si compila e si crea un pacchetto di un'applicazione Web, il WPP parametrizza automaticamente questi elementi:

  • Percorso e nome dell'applicazione Web IIS di destinazione.
  • Qualsiasi stringa di connessione nel file diweb.config .
  • Stringhe di connessione per tutti i database aggiunti alla scheda SQL Pacchetto/Pubblicazione nelle pagine delle proprietà del progetto.

Ad esempio, se si desidera compilare e creare il pacchetto della soluzione di esempio Contact Manager senza toccare il processo di parametrizzazione in alcun modo, il WPP genererà questo file 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>

In questo caso:

  • Il parametro Nome applicazione Web IIS è il percorso IIS in cui si vuole distribuire l'applicazione Web. Il valore predefinito viene ricavato dalla pagina Web Package/Publish nelle pagine delle proprietà del progetto.
  • Il parametro ApplicationServices-Web.config stringa di connessione è stato generato da un elemento connectionStrings/add nel file web.config . Rappresenta la stringa di connessione che l'applicazione deve usare per contattare il database di appartenenza. Il valore specificato qui verrà sostituito nel file diweb.config distribuito. Il valore predefinito viene ricavato dal file diweb.config di pre-distribuzione.

Il WPP parametrizza anche queste proprietà nel pacchetto di distribuzione generato. È possibile specificare i valori per queste proprietà quando si installa il pacchetto di distribuzione. Se si installa manualmente il pacchetto tramite Gestione IIS, come descritto in Installazione manuale di pacchetti Web, l'installazione guidata richiede di specificare i valori per tutti i parametri. Se si installa il pacchetto in modalità remota usando il file con estensione deploy.cmd , come descritto in Distribuzione di pacchetti Web, Distribuzione Web cercherà questo file SetParameters.xml per fornire i valori dei parametri. È possibile modificare manualmente i valori nel file SetParameters.xml oppure personalizzare il file come parte di un processo di compilazione e distribuzione automatizzato. Questo processo viene descritto in modo più dettagliato più avanti in questo argomento.

Parametrizzazione personalizzata

In scenari di distribuzione più complessi è spesso necessario parametrizzare proprietà aggiuntive prima di distribuire il progetto. In generale, è consigliabile parametrizzare tutte le proprietà e le impostazioni che variano tra gli ambienti di destinazione. ad esempio quelle riportate di seguito:

  • Endpoint di servizio nel file web.config .
  • Impostazioni dell'applicazione nel file web.config .
  • Tutte le altre proprietà dichiarative che si desidera richiedere agli utenti di specificare.

Il modo più semplice per parametrizzare queste proprietà consiste nell'aggiungere un file parameters.xml alla cartella radice del progetto dell'applicazione Web. Nella soluzione Contact Manager, ad esempio, il progetto ContactManager.Mvc include un file parameters.xml nella cartella radice.

Nella soluzione Contact Manager il progetto ContactManager.Mvc include un file parameters.xml nella cartella radice.

Se si apre questo file, si noterà che contiene una singola voce di parametro . La voce usa una query XPath (XML Path Language) per individuare e parametrizzare l'URL dell'endpoint del servizio ContactService Windows Communication Foundation (WCF) nel file 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>

Oltre a parametrizzare l'URL dell'endpoint nel pacchetto di distribuzione, il WPP aggiunge anche una voce corrispondente al file diSetParameters.xml che viene generato insieme al pacchetto di distribuzione.

<parameters>
  ...  
  <setParameter 
    name="ContactService Service Endpoint Address" 
    value="http://localhost/ContactManagerService" />
  ...
</parameters>

Se si installa manualmente il pacchetto di distribuzione, Gestione IIS richiederà l'indirizzo dell'endpoint di servizio insieme alle proprietà con parametrizzate automaticamente. Se si installa il pacchetto di distribuzione eseguendo il file con estensione deploy.cmd , è possibile modificare il file diSetParameters.xml in modo da fornire un valore per l'indirizzo dell'endpoint di servizio insieme ai valori per le proprietà con parametrizzazione automatica.

Per informazioni dettagliate su come creare un file diparameters.xml , vedere Procedura: Usare i parametri per configurare le impostazioni di distribuzione quando viene installato un pacchetto. La procedura denominata To use deployment parameters for Web.config file settings (Per usare i parametri di distribuzione per le impostazioni del file di Web.config ) fornisce istruzioni dettagliate.

Modifica del file SetParameters.xml

Se si prevede di distribuire manualmente il pacchetto dell'applicazione Web, eseguendo il file con estensione deploy.cmd o eseguendo MSDeploy.exe dalla riga di comando, non è possibile interrompere manualmente la modifica del file SetParameters.xml prima della distribuzione. Tuttavia, se si lavora a una soluzione su scala aziendale, potrebbe essere necessario distribuire un pacchetto dell'applicazione Web come parte di un processo di compilazione e distribuzione automatizzato di dimensioni maggiori. In questo scenario è necessario il Microsoft Build Engine (MSBuild) per modificare il file diSetParameters.xml. A tale scopo, è possibile usare l'attività XMLPoke MSBuild.

La soluzione di esempio Contact Manager illustra questo processo. Gli esempi di codice che seguono sono stati modificati per visualizzare solo i dettagli rilevanti per questo esempio.

Nota

Per una panoramica più ampia del modello di file di progetto nella soluzione di esempio e un'introduzione ai file di progetto personalizzati in generale, vedere Informazioni sul file di progetto e Informazioni sul processo di compilazione.

In primo luogo, i valori dei parametri di interesse vengono definiti come proprietà nel file di progetto specifico dell'ambiente , ad esempio 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>

Nota

Per indicazioni su come personalizzare i file di progetto specifici dell'ambiente per i propri ambienti server, vedere Configurare le proprietà di distribuzione per un ambiente di destinazione.

Il file Publish.proj importa quindi queste proprietà. Poiché ogniSetParameters.xml file è associato a un file con estensione deploy.cmd e si vuole che il file di progetto richiami ogni file con estensione deploy.cmd , il file di progetto crea un elemento MSBuild per ogni file con estensione deploy.cmd e definisce le proprietà di interesse come metadati dell'elemento.

<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>

In questo caso:

  • Il valore dei metadati ParametersXml indica il percorso del file SetParameters.xml .
  • Il valore iisWebAppName è il percorso IIS a cui si vuole distribuire l'applicazione Web.
  • Il valore MembershipDBConnectionString è la stringa di connessione per il database di appartenenza e il valore MembershipDBConnectionName è l'attributo name del parametro corrispondente nel file SetParameters.xml .
  • Il valore ServiceEndpointValue è l'indirizzo dell'endpoint per il servizio WCF nel server di destinazione e il valore ServiceEndpointParamName è l'attributo name del parametro corrispondente nel file SetParameters.xml .

Infine, nel file Publish.proj la destinazione PublishWebPackages usa l'attività XmlPoke per modificare questi valori nel file 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>

Si noterà che ogni attività XmlPoke specifica quattro valori di attributo:

  • L'attributo XmlInputPath indica all'attività dove trovare il file da modificare.
  • L'attributo Query è una query XPath che identifica il nodo XML da modificare.
  • L'attributo Value è il nuovo valore da inserire nel nodo XML selezionato.
  • L'attributo Condition è il criterio in cui l'attività deve essere eseguita o meno. In questi casi, la condizione garantisce che non si tenti di inserire un valore Null o vuoto nel file SetParameters.xml .

Conclusione

Questo argomento descrive il ruolo del file SetParameters.xml e spiega come viene generato quando si compila un progetto di applicazione Web. È stato spiegato come è possibile parametrizzare impostazioni aggiuntive aggiungendo un file diparameters.xml al progetto. Ha anche descritto come modificare il file SetParameters.xml come parte di un processo di compilazione automatizzato più grande, usando l'attività XmlPoke nei file di progetto.

Nell'argomento successivo, Distribuzione di pacchetti Web, viene descritto come distribuire un pacchetto Web eseguendo direttamente il file con estensione deploy.cmd o usando i comandi MSDeploy.exe. In entrambi i casi, è possibile specificare il file SetParameters.xml come parametro di distribuzione.

Altre informazioni

Per informazioni su come creare pacchetti Web, vedere Compilazione e creazione di pacchetti di progetti di applicazioni Web. Per indicazioni su come distribuire effettivamente un pacchetto Web, vedere Distribuzione di pacchetti Web. Per una procedura dettagliata su come creare un file diparameters.xml , vedere Procedura: Usare i parametri per configurare le impostazioni di distribuzione quando viene installato un pacchetto.

Per informazioni più generali sulla parametrizzazione in Distribuzione Web, vedere Parametrizzazione distribuzione Web in azione (post di blog).