Konfigurieren von Bereitstellungseigenschaften für eine Zielumgebung

von Jason Lee

In diesem Thema wird beschrieben, wie Sie umgebungsspezifische Eigenschaften konfigurieren, um die Contact Manager-Beispiellösung in einer bestimmten Zielumgebung bereitzustellen.

Dieses Thema ist Teil einer Reihe von Tutorials, die sich auf die Unternehmensbereitstellungsanforderungen eines fiktiven Unternehmens namens Fabrikam, Inc. beziehen. In dieser Tutorialreihe wird eine Beispiellösung – die Contact Manager-Lösung – verwendet, um eine Webanwendung mit einem realistischen Komplexitätsgrad darzustellen, einschließlich einer ASP.NET MVC 3-Anwendung, eines WCF-Diensts (Windows Communication Foundation) und eines Datenbankprojekts.

Die Bereitstellungsmethode im Mittelpunkt dieser Tutorials basiert auf dem unter Grundlegendes zum Buildprozess beschriebenen Ansatz für geteilte Projektdateien, bei dem der Buildprozess von zwei Projektdateien gesteuert wird– eine mit Buildanweisungen, die für jede Zielumgebung gelten, und eine mit umgebungsspezifischen Build- und Bereitstellungseinstellungen. Zur Buildzeit wird die umgebungsspezifische Projektdatei in die umgebungsunabhängige Projektdatei zusammengeführt, um einen vollständigen Satz von Buildanweisungen zu bilden.

Prozessübersicht

Die Projektdatei, die Sie zum Erstellen und Bereitstellen der Contact Manager-Projektmappe verwenden, wird in zwei physische Dateien aufgeteilt:

  • Eine, die universelle Buildeinstellungen und -anweisungen enthält (die Datei Publish.proj ).
  • Eine, die umgebungsspezifische Buildeinstellungen enthält (Env-Dev.proj, Env-Stage.proj usw.).

Zur Buildzeit wird die entsprechende umgebungsspezifische Projektdatei in die universelle Publish.proj-Datei zusammengeführt, um einen vollständigen Satz von Buildanweisungen zu bilden. Sie können die Bereitstellung für bestimmte Zielumgebungen konfigurieren, indem Sie umgebungsspezifische Projektdateien mit Einstellungen erstellen oder anpassen, die Ihr eigenes Bereitstellungsszenario beschreiben.

Viele dieser Werte werden von der Konfiguration Ihrer Zielumgebung bestimmt, insbesondere davon, ob Ihr Zielwebserver für die Verwendung des Web Deployment Agent-Diensts (Remote-Agent) oder des Web Deploy-Handlers konfiguriert ist. Weitere Informationen zu diesen Ansätzen und Anleitungen zur Auswahl des richtigen Ansatzes für Ihre eigene Umgebung finden Sie unter Auswählen des richtigen Ansatzes für die Webbereitstellung.

Für das Contact Manager-Szenario sind zwei umgebungsspezifische Projektdateien erforderlich:

  • Bereitstellung in einer Entwicklertestumgebung (Env-Dev.proj). Die Entwicklertestumgebung ist so konfiguriert, dass Remotebereitstellungen mithilfe des Remote-Agents akzeptiert werden, wie unter Szenario: Konfigurieren einer Testumgebung für die Webbereitstellung beschrieben. Diese Datei muss die Remote-Agent-Endpunktadresse sowie standortspezifische Einstellungen wie Verbindungszeichenfolgen und Dienstendpunkte angeben.
  • Bereitstellung in einer Stagingumgebung (Env-Stage.proj). Die Stagingumgebung ist so konfiguriert, dass Remotebereitstellungen mithilfe des Web Deploy-Handlers akzeptiert werden, wie unter Szenario: Konfigurieren einer Stagingumgebung für die Webbereitstellung beschrieben. Diese Datei muss die Web Deploy Handler-Endpunktadresse sowie standortspezifische Einstellungen wie Verbindungszeichenfolgen und Dienstendpunkte angeben.

Beachten Sie, dass sich die Einstellungen, die Sie in der umgebungsspezifischen Projektdatei konfigurieren, nicht auf den Inhalt des Webpakets selbst auswirken. Stattdessen steuern sie, wie das Paket bereitgestellt wird und welche Parameterwerte beim Extrahieren des Pakets bereitgestellt werden. Sie importieren das Webpaket manuell in die Produktionsumgebung, wie unter Szenario: Konfigurieren einer Produktionsumgebung für die Webbereitstellung und manuelles Installieren von Webpaketen beschrieben, sodass es keine Rolle spielt, welche Einstellungen Sie in der umgebungsspezifischen Projektdatei verwendet haben, als Sie das Paket generiert haben. Der Internetinformationsdienste-Manager (IIS) fordert Sie beim Importieren des Pakets zur Eingabe parametrisierter Werte auf, z. B. Verbindungszeichenfolgen und Dienstendpunkte.

Um die Contact Manager-Lösung in Ihrer eigenen Zielumgebung bereitzustellen, können Sie diese Datei entweder anpassen oder als Vorlage verwenden und Ihre eigene Datei erstellen.

So konfigurieren Sie umgebungsspezifische Bereitstellungseinstellungen für die Contact Manager-Lösung

  1. Öffnen Sie die Projektmappe ContactManager-WCF in Visual Studio 2010.

  2. Erweitern Sie im fenster Projektmappen-Explorer den Ordner Veröffentlichen, erweitern Sie den Ordner EnvConfig, und doppelklicken Sie dann auf Env-Dev.proj.

    Erweitern Sie im Fenster Projektmappen-Explorer den Ordner Veröffentlichen, erweitern Sie den Ordner EnvConfig, und doppelklicken Sie dann auf Env-Dev.proj.

  3. Ersetzen Sie die Eigenschaftswerte in der Datei Env-Dev.proj durch die richtigen Werte für Ihre eigene Testumgebung.

    Hinweis

    Die Tabelle, die diesem Verfahren folgt, enthält weitere Informationen zu jeder dieser Eigenschaften.

  4. Speichern Sie Ihre Arbeit, und schließen Sie dann die Datei Env-Dev.proj .

Auswählen der richtigen Bereitstellungseigenschaften

In dieser Tabelle wird der Zweck der einzelnen Eigenschaften in der umgebungsspezifischen Beispielprojektdatei Env-Dev.proj beschrieben. Außerdem finden Sie eine Anleitung zu den Werten, die Sie angeben sollten.

Eigenschaftenname Details
MSDeployComputerName Der Name des Zielwebservers oder Dienstendpunkts. Wenn Sie die Bereitstellung im Remote-Agent-Dienst auf dem Zielwebserver durchführen, können Sie den Namen des Zielcomputers angeben (z. B. TESTWEB1 oder TESTWEB1.fabrikam.net), oder Sie können den Remote-Agent-Endpunkt angeben (z. B http://TESTWEB1/MSDEPLOYAGENTSERVICE. ). Die Bereitstellung funktioniert in jedem Fall auf die gleiche Weise. Wenn Sie die Bereitstellung im Web Deploy-Handler auf dem Zielwebserver durchführen, sollten Sie den Dienstendpunkt angeben und den Namen der IIS-Website als Abfragezeichenfolgenparameter einschließen (z. B https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite. ).
MSDeployAuth Die Methode, die Web Deploy verwenden sollte, um sich beim Remotecomputer zu authentifizieren. Dies sollte auf NTLM oder Basic festgelegt werden. In der Regel verwenden Sie NTLM , wenn Sie die Bereitstellung für den Remote-Agent-Dienst durchführen, und Basic , wenn Sie die Bereitstellung im Web Deploy-Handler durchführen. Wenn Sie die Standardauthentifizierung verwenden, müssen Sie auch den Benutzernamen und das Kennwort angeben, die das IIS-Webbereitstellungstool (Web Deploy) annehmen soll, um die Bereitstellung durchzuführen. In diesem Beispiel werden diese Werte über die Eigenschaften MSDeployUsername und MSDeployPassword bereitgestellt. Wenn Sie die NTLM-Authentifizierung verwenden, können Sie diese Eigenschaften weglassen oder leer lassen.
MSDeployUsername Wenn Sie die Standardauthentifizierung verwenden, verwendet Web Deploy dieses Konto auf dem Remotecomputer. Dies sollte die Form DOMÄNE*Benutzername* haben (z. B. FABRIKAM\matt). Dieser Wert wird nur verwendet, wenn Sie die Standardauthentifizierung angeben. Wenn Sie die NTLM-Authentifizierung verwenden, kann die -Eigenschaft weggelassen werden. Wenn ein Wert angegeben wird, wird er ignoriert.
MSDeployPassword Wenn Sie die Standardauthentifizierung verwenden, verwendet Web Deploy dieses Kennwort auf dem Remotecomputer. Dies ist das Kennwort für das Benutzerkonto, das Sie in der MSDeployUsername-Eigenschaft angegeben haben. Dieser Wert wird nur verwendet, wenn Sie die Standardauthentifizierung angeben. Wenn Sie die NTLM-Authentifizierung verwenden, kann die -Eigenschaft weggelassen werden. Wenn ein Wert angegeben wird, wird er ignoriert.
ContactManagerIisPath Der IIS-Pfad, auf dem Sie die Contact Manager MVC-Anwendung bereitstellen möchten. Dies sollte der Pfad sein, wie er im IIS-Manager im Format [Name der IIS-Website]/[Name der Webanwendung] angezeigt wird. Denken Sie daran, dass die IIS-Website vorhanden sein muss, bevor Sie Ihre Anwendung bereitstellen. Wenn Sie beispielsweise eine IIS-Website mit dem Namen DemoSite erstellt haben, können Sie den IIS-Pfad für die MVC-Anwendung als DemoSite/ContactManager angeben.
ContactManagerServiceIisPath Der IIS-Pfad, auf dem Sie den Contact Manager-WCF-Dienst bereitstellen möchten. Wenn Sie beispielsweise eine IIS-Website mit dem Namen DemoSite erstellt haben, können Sie den IIS-Pfad für den WCF-Dienst als DemoSite/ContactManagerService angeben.
ContactManagerTargetUrl Die URL, unter der der WCF-Dienst erreicht werden kann. Dies hat die Form [Stamm-URL der IIS-Website]/[Dienstanwendungsname]/[Dienstendpunkt]. Wenn Sie beispielsweise eine IIS-Website an Port 85 erstellt haben, hat die URL das Format http://localhost:85/ContactManagerService/ContactService.svc. Denken Sie daran, dass die MVC-Anwendung und der WCF-Dienst auf demselben Server bereitgestellt werden. Daher wird auf diese URL immer nur von dem Computer zugegriffen, auf dem sie installiert ist. Daher ist es besser, localhost oder die IP-Adresse anstelle des Computernamens oder eines Hostheaders in der URL zu verwenden. Wenn Sie den Computernamen oder einen Hostheader verwenden, blockiert das Feature zur Loopbacküberprüfung in IIS möglicherweise die URL und gibt den Fehler HTTP 401.1 – Nicht autorisiert zurück.
CmDatabaseConnectionString Die Verbindungszeichenfolge für den Datenbankserver. Die Verbindungszeichenfolge bestimmt sowohl die Anmeldeinformationen, die VSDBCMD zum Kontaktieren des Datenbankservers und zum Erstellen der Datenbank verwendet, als auch die Anmeldeinformationen, die der Webserveranwendungspool verwendet, um den Datenbankserver zu kontaktieren und mit der Datenbank zu interagieren. Im Wesentlichen haben Sie hier zwei Möglichkeiten. Sie können Integrated Security=true angeben. In diesem Fall wird integrierte Windows-Authentifizierung verwendet: Datenquelle=TESTDB1;Integrierte Sicherheit=true In diesem Fall wird die Datenbank mit den Anmeldeinformationen des Benutzers erstellt, der die ausführbare VSDBCMD-Datei ausführt, und die Anwendung greift mithilfe der Identität des Webservercomputerkontos auf die Datenbank zu. Alternativ können Sie den Benutzernamen und das Kennwort eines SQL Server-Kontos angeben. In diesem Fall werden die SQL Server Anmeldeinformationen sowohl von VSDBCMD zum Erstellen der Datenbank als auch vom Anwendungspool für die Interaktion mit der Datenbank verwendet: Datenquelle=TESTDB1; User Id=ASqlUser; Password=Pa$$w 0rd Bei den exemplarischen Vorgehensweisen in diesem Thema wird davon ausgegangen, dass Sie integrierte Windows-Authentifizierung verwenden.
CmTargetDatabase Der Name, den Sie der Datenbank geben möchten, die Sie auf dem Datenbankserver erstellen. Der hier bereitgestellte Wert wird dem VSDBCMD-Befehl als Parameter hinzugefügt. Es wird auch verwendet, um eine vollständige Verbindungszeichenfolge zu erstellen, die der Anwendungspool auf dem Webserver für die Interaktion mit der Datenbank verwenden kann.

Diese Beispiele zeigen, wie Sie diese Eigenschaften für bestimmte Bereitstellungsszenarien konfigurieren können.

Beispiel 1: Bereitstellung im Remote-Agent-Dienst

In diesem Beispiel:

  • Sie stellen die Bereitstellung für den Remote-Agent-Dienst auf TESTWEB1 bereit.
  • Sie weisen Web Deploy an, die NTLM-Authentifizierung zu verwenden. Web Deploy wird mit den Anmeldeinformationen ausgeführt, die Sie zum Aufrufen des Microsoft-Build-Engine (MSBuild) verwendet haben.
  • Sie verwenden die integrierte Authentifizierung, um die ContactManager-Datenbank in TESTDB1 bereitzustellen. Die Datenbank wird mit den Anmeldeinformationen bereitgestellt, die Sie zum Aufrufen von MSBuild verwendet haben.
<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>

Beispiel 2: Bereitstellung für den Web Deploy-Handlerendpunkt

In diesem Beispiel:

  • Sie stellen die Bereitstellung auf dem Web Deploy Handler-Dienstendpunkt auf STAGEWEB1 bereit.
  • Sie weisen Web Deploy an, die Standardauthentifizierung zu verwenden.
  • Sie geben an, dass Web Deploy die Identität des Kontos FABRIKAM\stagingdeployer auf dem Remotecomputer annehmen soll.
  • Sie verwenden SQL Server-Authentifizierung, um die ContactManager-Datenbank in STAGEDB1 bereitzustellen.
<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>

Zusammenfassung

An diesem Punkt sind Ihre Projektdateien vollständig für das Erstellen und Bereitstellen der Contact Manager-Lösung in mindestens einer Zielumgebung konfiguriert.

Um diese Projektdateien als Teil eines einstufigen, wiederholbaren Bereitstellungsprozesses zu verwenden, müssen Sie die Datei Publish.proj mithilfe von MSBuild ausführen und den Speicherort der umgebungsspezifischen Projektdatei als Parameter übergeben. Dies ist auf verschiedene Arten möglich: