Configurazione delle proprietà di distribuzione per un ambiente di destinazione

di Jason Lee

In questo argomento viene descritto come configurare le proprietà specifiche dell'ambiente per distribuire la soluzione Contact Manager di esempio in un ambiente di destinazione specifico.

Questo argomento fa parte di una serie di esercitazioni basate sui requisiti di distribuzione aziendali di una società fittizia denominata Fabrikam, Inc. Questa serie di esercitazioni usa una soluzione di esempio, la soluzione Contact Manager , per rappresentare un'applicazione Web con un livello realistico di complessità, tra cui un'applicazione MVC 3 ASP.NET, un servizio WINDOWS Communication Foundation (WCF) e un progetto di database.

Il metodo di distribuzione al centro di queste esercitazioni si basa sull'approccio di suddivisione del file di progetto descritto in Informazioni sul processo di compilazione, in cui il processo di compilazione è controllato da due file di progetto, uno contenente istruzioni di compilazione applicabili a ogni ambiente di destinazione e una contenente impostazioni di compilazione e distribuzione specifiche dell'ambiente. In fase di compilazione, il file di progetto specifico dell'ambiente viene unito al file di progetto agnostico dell'ambiente per formare un set completo di istruzioni di compilazione.

Panoramica del processo

Il file di progetto che si userà per compilare e distribuire la soluzione Contact Manager è suddiviso in due file fisici:

  • Una che contiene impostazioni e istruzioni di compilazione universali (file Publish.proj ).
  • Uno che contiene impostazioni di compilazione specifiche dell'ambiente (Env-Dev.proj, Env-Stage.proj e così via).

In fase di compilazione, il file di progetto specifico dell'ambiente appropriato viene unito al file publish.proj universale per formare un set completo di istruzioni di compilazione. È possibile configurare la distribuzione in ambienti di destinazione specifici creando o personalizzando i file di progetto specifici dell'ambiente con impostazioni che descrivono lo scenario di distribuzione personalizzato.

Molti di questi valori sono determinati dal modo in cui è configurato l'ambiente di destinazione, in particolare se il server Web di destinazione è configurato per l'uso del servizio Web Deployment Agent (agente remoto) o del gestore distribuzione Web. Per altre informazioni su questi approcci e per indicazioni sulla scelta dell'approccio appropriato per il proprio ambiente, vedere Scelta dell'approccio appropriato alla distribuzione Web.

Lo scenario di Contact Manager richiede due file di progetto specifici dell'ambiente:

  • Distribuzione in un ambiente di test per sviluppatori (Env-Dev.proj). L'ambiente di test per sviluppatori è configurato per accettare distribuzioni remote usando l'agente remoto, come descritto in Scenario: Configurazione di un ambiente di test per la distribuzione Web. Questo file deve fornire l'indirizzo dell'endpoint dell'agente remoto e le impostazioni specifiche della posizione, ad esempio stringhe di connessione e endpoint di servizio.
  • Distribuzione in un ambiente di staging (Env-Stage.proj). L'ambiente di gestione temporanea è configurato per accettare distribuzioni remote usando il gestore distribuzione Web, come descritto in Scenario: Configurazione di un ambiente di gestione temporanea per la distribuzione Web. Questo file deve fornire l'indirizzo dell'endpoint di distribuzione Web e le impostazioni specifiche del percorso, ad esempio stringhe di connessione e endpoint di servizio.

È importante notare che le impostazioni configurate nel file di progetto specifico dell'ambiente non influiscono sul contenuto del pacchetto Web stesso, ma controllano invece la distribuzione del pacchetto e i valori dei parametri forniti quando il pacchetto viene estratto. Si sta importando il pacchetto Web nell'ambiente di produzione manualmente, come descritto in Scenario: Configurazione di un ambiente di produzione per la distribuzione Web e Installazione manuale di pacchetti Web, in modo da non importare le impostazioni usate nel file di progetto specifico dell'ambiente quando è stato generato il pacchetto. Gestione Internet Information Services (IIS) richiederà eventuali valori con parametri, ad esempio stringhe di connessione ed endpoint di servizio, quando si importa il pacchetto.

Per distribuire la soluzione Contact Manager nel proprio ambiente di destinazione, è possibile personalizzare questo file o usarlo come modello e creare un file personalizzato.

Per configurare le impostazioni di distribuzione specifiche dell'ambiente per la soluzione Contact Manager

  1. Aprire la soluzione ContactManager-WCF in Visual Studio 2010.

  2. Nella finestra Esplora soluzioni espandere la cartella Pubblica, espandere la cartella EnvConfig e quindi fare doppio clic su Env-Dev.proj.

    Nella finestra Esplora soluzioni espandere la cartella Pubblica, espandere la cartella EnvConfig e quindi fare doppio clic su Env-Dev.proj.

  3. Sostituire i valori delle proprietà nel file Env-Dev.proj con i valori corretti per l'ambiente di test.

    Nota

    La tabella che segue questa procedura fornisce altre informazioni su ognuna di queste proprietà.

  4. Salvare il lavoro e quindi chiudere il file Env-Dev.proj .

Scelta delle proprietà di distribuzione corrette

Questa tabella descrive lo scopo di ogni proprietà nel file di progetto specifico dell'ambiente di esempio, Env-Dev.proj e fornisce alcune indicazioni sui valori da fornire.

Nome proprietà Dettagli
MSDeployComputerName Nome del server Web di destinazione o dell'endpoint di servizio. Se si esegue la distribuzione nel servizio agente remoto nel server Web di destinazione, è possibile specificare il nome del computer di destinazione ,ad esempio TESTWEB1 o TESTWEB1.fabrikam.net, oppure è possibile specificare l'endpoint dell'agente remoto (ad esempio). http://TESTWEB1/MSDEPLOYAGENTSERVICE La distribuzione funziona allo stesso modo in ogni caso. Se si esegue la distribuzione nel gestore distribuzione Web Web nel server Web di destinazione, è necessario specificare l'endpoint del servizio e includere il nome del sito Web IIS come parametro stringa di query, ad esempio https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite.
MSDeployAuth Metodo che Web Deploy deve usare per eseguire l'autenticazione nel computer remoto. Questa opzione deve essere impostata su NTLM o Basic. In genere, si userà NTLM se si esegue la distribuzione nel servizio agente remoto e Basic se si esegue la distribuzione nel gestore distribuzione Web. Se si usa l'autenticazione di base, è anche necessario specificare il nome utente e la password che lo strumento di distribuzione Web IIS (Distribuzione Web) deve rappresentare per eseguire la distribuzione. In questo esempio questi valori vengono forniti tramite le proprietà MSDeployUsername e MSDeployPassword . Se si usa l'autenticazione NTLM, è possibile omettere queste proprietà o lasciarle vuote.
MSDeployUsername Se si usa l'autenticazione di base, La distribuzione Web userà questo account nel computer remoto. Questo deve accettare il formato DOMAIN*username* (ad esempio FABRIKAM\matt). Questo valore viene usato solo se si specifica l'autenticazione di base. Se si usa l'autenticazione NTLM, la proprietà può essere omessa. Se viene specificato un valore, verrà ignorato.
MSDeployPassword Se si usa l'autenticazione di base, La distribuzione Web userà questa password nel computer remoto. Si tratta della password per l'account utente specificato nella proprietà MSDeployUsername . Questo valore viene usato solo se si specifica l'autenticazione di base. Se si usa l'autenticazione NTLM, la proprietà può essere omessa. Se viene specificato un valore, verrà ignorato.
ContactManagerIisPath Percorso IIS in cui si vuole distribuire l'applicazione MVC di Contact Manager. Questo deve essere il percorso visualizzato in Gestione IIS, nel formato [nome sito Web IIS]/[nome applicazioneWeb]. Tenere presente che il sito Web IIS deve esistere prima di distribuire l'applicazione. Ad esempio, se è stato creato un sito Web IIS denominato DemoSite, è possibile specificare il percorso IIS per l'applicazione MVC come DemoSite/ContactManager.
ContactManagerServiceIisPath Percorso IIS in cui si vuole distribuire il servizio WCF di Contact Manager. Ad esempio, se è stato creato un sito Web IIS denominato DemoSite, è possibile specificare il percorso IIS per il servizio WCF come DemoSite/ContactManagerService.
ContactManagerTargetUrl URL in cui è possibile raggiungere il servizio WCF. Verrà visualizzata la maschera [URL radice del sito Web IIS]/[nome applicazione servizio]/[endpoint servizio]. Ad esempio, se è stato creato un sito Web IIS sulla porta 85, l'URL assumerà il formato http://localhost:85/ContactManagerService/ContactService.svc. Tenere presente che l'applicazione MVC e il servizio WCF vengono distribuiti nello stesso server. Di conseguenza, questo URL è sempre accessibile dal computer in cui è installato. A causa di questo, è preferibile usare localhost o l'indirizzo IP, anziché il nome del computer o un'intestazione host, nell'URL. Se si usa il nome del computer o un'intestazione host, la funzionalità di controllo del cicloback in IIS può bloccare l'URL e restituire un errore HTTP 401.1 - Errore non autorizzato .
CmDatabaseConnectionString Stringa di connessione per il server di database. La stringa di connessione determina entrambe le credenziali che VSDBCMD userà per contattare il server di database e creare il database e le credenziali usate dal pool di applicazioni del server Web per contattare il server di database e interagire con il database. In sostanza hai due scelte qui. È possibile specificare Integrated Security=true, nel qual caso viene utilizzata la autenticazione di Windows integrata: Origine dati=TESTDB1;Integrated Security=true In questo caso, il database verrà creato usando le credenziali dell'utente che esegue l'eseguibile VSDBCMD e l'applicazione accederà al database usando l'identità dell'account del computer Web. In alternativa, è possibile specificare il nome utente e la password di un account SQL Server. In questo caso, le credenziali di SQL Server vengono usate sia da VSDBCMD per creare il database che dal pool di applicazioni per interagire con il database: Origine dati=TESTDB1; Id utente=ASqlUser; Password=Pa$$w 0rd Le procedure dettagliate in questo argomento presuppongono che si useranno autenticazione di Windows integrate.
CmTargetDatabase Nome che si vuole assegnare al database che si creerà nel server di database. Il valore specificato qui viene aggiunto al comando VSDBCMD come parametro. Viene usato anche per creare una stringa di connessione completa che il pool di applicazioni nel server Web può usare per interagire con il database.

Questi esempi illustrano come configurare queste proprietà per scenari di distribuzione specifici.

Esempio 1: distribuzione nel servizio agente remoto

Esempio:

  • Si sta distribuendo nel servizio agente remoto in TESTWEB1.
  • Si indica la distribuzione Web per usare l'autenticazione NTLM. La distribuzione Web verrà eseguita usando le credenziali usate per richiamare l'Microsoft Build Engine (MSBuild).
  • Si usa l'autenticazione integrata per distribuire il database ContactManager in TESTDB1. Il database verrà distribuito usando le credenziali usate per richiamare MSBuild.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>    
    <MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
      TESTWEB1.fabrikam.net
    </MSDeployComputerName>
    <MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">NTLM</MSDeployAuth>
    <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
      http://localhost:85/ContactManagerService/ContactService.svc
    </ContactManagerTargetUrl>
    <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
      DemoSite/ContactManager
    </ContactManagerIisPath>
    <ContactManagerServiceIisPath 
      Condition=" '$(ContactManagerServiceIisPath)'=='' ">
        DemoSite/ContactManagerService
    </ContactManagerServiceIisPath>
    <CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
      Data Source=TESTDB1;Integrated Security=true</CmDatabaseConnectionString>
    <CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
      ContactManager
    </CmTargetDatabase>
  </PropertyGroup>  
</Project>

Esempio 2: distribuzione nell'endpoint del gestore distribuzione Web

Esempio:

  • Si sta distribuendo nell'endpoint del servizio Distribuimento Web in STAGEWEB1.
  • Si indica a Distribuzione Web di usare l'autenticazione di base.
  • Si specifica che Distribuzione Web deve rappresentare l'account FABRIKAM\stagingdeployer nel computer remoto.
  • Si usa SQL Server autenticazione per distribuire il database ContactManager in STAGEDB1.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>    
    <MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
      https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite
    </MSDeployComputerName>
    <MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">Basic</MSDeployAuth>
    <MSDeployUsername Condition=" '$(MSDeployUsername)'=='' ">
      FABRIKAM\stagingdeployer
    </MSDeployUsername>
    <MSDeployPassword Condition=" '$(MSDeployPassword)'=='' ">
      Pa$$w0rd
    </MSDeployPassword>
    <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
      http://localhost:85/ContactManagerService/ContactService.svc
    </ContactManagerTargetUrl>
    <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
      DemoSite/ContactManager
    </ContactManagerIisPath>
    <ContactManagerServiceIisPath 
      Condition=" '$(ContactManagerServiceIisPath)'=='' ">
        DemoSite/ContactManagerService
    </ContactManagerServiceIisPath>
    <CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
      Data Source=STAGEDB1;User ID=sa;'$($CREDENTIAL_PLACEHOLDER$)'
    </CmDatabaseConnectionString>
    <CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
      ContactManager
    </CmTargetDatabase>
  </PropertyGroup>  
</Project>

Conclusione

A questo punto, i file di progetto sono completamente configurati per compilare e distribuire la soluzione Contact Manager in uno o più ambienti di destinazione.

Per usare questi file di progetto come parte di un processo di distribuzione ripetibile in un singolo passaggio, è necessario eseguire il file Publish.proj usando MSBuild e passare il percorso del file di progetto specifico dell'ambiente come parametro. È possibile eseguire questa operazione in vari modi: