Sdílet prostřednictvím


Převedení webových aplikací offline nástrojem pro nasazení webu

Jason Lee

Toto téma popisuje, jak převést webovou aplikaci do offline režimu po dobu trvání automatizovaného nasazení pomocí Nástroje pro nasazení webu Internetové informační služby (IIS). Uživatelé, kteří přejdou na webovou aplikaci, budou přesměrováni do souboruApp_offline.htm , dokud se nasazení neskončí.

Toto téma je součástí řady kurzů založených na požadavcích na podnikové nasazení fiktivní společnosti s názvem Fabrikam, Inc. Tato série kurzů používá ukázkové řešení – řešení Contact Manager – k reprezentaci webové aplikace s realistickou úrovní složitosti, včetně aplikace ASP.NET MVC 3, služby Windows Communication Foundation (WCF) a databázového projektu.

Metoda nasazení, která je základem těchto kurzů, je založená na přístupu k rozděleným souborům projektu popsaném v tématu Principy souboru projektu, ve kterém je proces sestavení řízen dvěma soubory projektu – jeden obsahuje pokyny k sestavení, které platí pro každé cílové prostředí, a druhý obsahuje nastavení sestavení a nasazení specifické pro dané prostředí. V době sestavení se soubor projektu pro konkrétní prostředí sloučí do souboru projektu nezávislého na prostředí, aby se vytvořila úplná sada pokynů k sestavení.

Přehled úkolů

V mnoha scénářích budete chtít převést webovou aplikaci do režimu offline, zatímco budete provádět změny souvisejících komponent, jako jsou databáze nebo webové služby. Ve službě IIS a ASP.NET toho obvykle dosáhnete umístěním souboru s názvem App_offline.htm do kořenové složky webu nebo webové aplikace služby IIS. SouborApp_offline.htm je standardní soubor HTML a obvykle bude obsahovat jednoduchou zprávu, která uživatele upozorní, že web je dočasně nedostupný z důvodu údržby. Zatímco App_offline.htm soubor existuje v kořenové složce webu, služba IIS automaticky přesměruje všechny požadavky na soubor. Po dokončení aktualizací odeberete souborApp_offline.htm a web bude pokračovat v poskytování žádostí obvyklým způsobem.

Pokud používáte nasazení webu k provádění automatizovaných nebo jednostupňových nasazení do cílového prostředí, můžete do procesu nasazení začlenit přidání a odebrání souboruApp_offline.htm . K tomu budete muset provést tyto úkoly na vysoké úrovni:

  • V souboru projektu Microsoft Build Engine (MSBuild), který používáte k řízení procesu nasazení, vytvořte cíl nástroje MSBuild, který zkopíruje souborApp_offline.htm na cílový server před zahájením úkolů nasazení.
  • Přidejte další cíl nástroje MSBuild, který po dokončení všech úloh nasazení odebere souborApp_offline.htm z cílového serveru.
  • V projektu webové aplikace vytvořte soubor .wpp.targets , který zajistí přidání souboruApp_offline.htm do balíčku nasazení při vyvolání nasazení webu.

V tomto tématu se dozvíte, jak tyto postupy provést. Úkoly a návody v tomto tématu předpokládají, že jste už vytvořili řešení, které obsahuje alespoň jeden projekt webové aplikace, a že k řízení procesu nasazení používáte vlastní soubor projektu, jak je popsáno v tématu Nasazení webu v podniku. Případně můžete použít ukázkové řešení Contact Manageru a postupovat podle příkladů v tématu.

Přidání souboru App_Offline do projektu webové aplikace

Prvním úkolem, který je potřeba dokončit, je přidání souboru App_offline do projektu webové aplikace:

  • Pokud chcete zabránit tomu, aby soubor narušoval proces vývoje (nechcete, aby vaše aplikace byla trvale offline), měli byste ho volat jinak než App_offline.htm. Soubor můžete pojmenovat například App_offline-template.htm.
  • Pokud chcete zabránit nasazení souboru tak, jak je, měli byste nastavit akci sestavení na Hodnotu Žádné.

Přidání souboru App_offline do projektu webové aplikace

  1. Otevřete řešení v sadě Visual Studio 2010.

  2. V okně Průzkumník řešení klikněte pravým tlačítkem myši na projekt webové aplikace, přejděte na Přidat a potom klikněte na Nová položka.

  3. V dialogovém okně Přidat novou položku vyberte Stránka HTML.

  4. Do pole Název zadejte App_offline-template.htma potom klikněte na Přidat.

    Do pole Název zadejte App_offline-template.htm a klikněte na Přidat.

  5. Přidejte jednoduchý kód HTML, který uživatele informuje o nedostupnosti aplikace, a pak soubor uložte. Nezahrnujte žádné značky na straně serveru (například značky s předponou asp:).

    Přidejte několik jednoduchých H T M L, abyste uživatele informovali, že aplikace není k dispozici, a pak soubor uložte.

  6. V okně Průzkumník řešení klikněte pravým tlačítkem na nový soubor a potom klikněte na Vlastnosti.

  7. V okně Vlastnosti na řádku Akce sestavení vyberte Žádné.

    V okno Vlastnosti na řádku Akce sestavení vyberte Žádné.

Nasazení a odstranění souboru App_Offline

Dalším krokem je úprava logiky nasazení tak, aby soubor na začátku procesu nasazení zkopírovala na cílový server a na konci ho odebrala.

Poznámka

Další postup předpokládá, že k řízení procesu nasazení používáte vlastní soubor projektu MSBuild, jak je popsáno v tématu Principy souboru projektu. Pokud nasazujete přímo ze sady Visual Studio, budete muset použít jiný přístup. Sayed Ibrahim Hashimi popisuje jeden takový přístup v článku Jak během publikování převést webovou aplikaci do offline režimu.

Pokud chcete nasadit soubor App_offline na cílový web služby IIS, musíte vyvolat MSDeploy.exe pomocí zprostředkovatele contentPath nasazení webu. Zprostředkovatel contentPath podporuje cesty fyzických adresářů i cesty k webu nebo aplikaci služby IIS, což z něj činí ideální volbu pro synchronizaci souboru mezi složkou projektu sady Visual Studio a webovou aplikací služby IIS. Pokud chcete soubor nasadit, měl by příkaz MSDeploy vypadat takto:

msdeploy.exe –verb:sync
             -source:contentPath="[Project folder]\App_offline.template.htm"
             -dest:contentPath="[IIS application path]/App_offline.htm",
              computerName="[Destination web server]"

Pokud chcete soubor odebrat z cílové lokality na konci procesu nasazení, měl by příkaz MSDeploy vypadat takto:

msdeploy.exe –verb:delete
             -dest:contentPath="[IIS application path]/App_offline.htm",
              computerName="[Destination web server]"

Pokud chcete tyto příkazy automatizovat v rámci procesu sestavení a nasazení, musíte je integrovat do vlastního souboru projektu MSBuild. Další postup popisuje, jak to udělat.

Nasazení a odstranění souboru App_offline

  1. V sadě Visual Studio 2010 otevřete soubor projektu MSBuild, který řídí proces nasazení. V ukázkovém řešení Contact Manageru se jedná o soubor Publish.proj .

  2. V kořenovém elementu Project vytvořte nový element PropertyGroup pro uložení proměnných pro nasazení App_offline :

    <PropertyGroup>
      <AppOfflineTemplateFilename   
        Condition=" '$(AppOfflineTemplateFilename)'=='' ">
          app_offline-template.htm
      </AppOfflineTemplateFilename>
      <AppOfflineSourcePath 
        Condition=" '$(AppOfflineSourcePath)'==''">
          $(SourceRoot)ContactManager.Mvc\$(AppOfflineTemplateFilename)
      </AppOfflineSourcePath>
    </PropertyGroup>
    
  3. Vlastnost SourceRoot je definována jinde v souboru Publish.proj . Označuje umístění kořenové složky zdrojového obsahu vzhledem k aktuální cestě – jinými slovy vzhledem k umístění souboru Publish.proj .

  4. Zprostředkovatel contentPath nebude přijímat relativní cesty k souborům, takže před jeho nasazením musíte získat absolutní cestu ke zdrojovému souboru. K tomu můžete použít úlohu ConvertToAbsolutePath .

  5. Přidejte nový cílový element s názvem GetAppOfflineAbsolutePath. V rámci tohoto cíle použijte úlohu ConvertToAbsolutePath k získání absolutní cesty k souboru App_offline-template ve složce projektu.

    <Target Name="GetAppOfflineAbsolutePath" BeforeTargets="DeployAppOffline">
      <ConvertToAbsolutePath Paths="$(AppOfflineSourcePath)">
        <Output TaskParameter="AbsolutePaths"       
                PropertyName="AppOfflineAbsoluteSourcePath" />
      </ConvertToAbsolutePath>
    </Target>
    
  6. Tento cíl vezme relativní cestu k souboru App_offline-template ve složce projektu a uloží ji do nové vlastnosti jako absolutní cestu k souboru. Atribut BeforeTargets určuje, že chcete, aby se tento cíl spustil před cílem DeployAppOffline , který vytvoříte v dalším kroku.

  7. Přidejte nový cíl s názvem DeployAppOffline. V rámci tohoto cíle vyvolejte příkaz MSDeploy.exe, který nasadí soubor App_offline na cílový webový server.

    <Target Name="DeployAppOffline" 
            Condition=" '$(EnableAppOffline'!='false' ">
      <PropertyGroup> 
        <_Cmd>"$(MSDeployPath)\msdeploy.exe" -verb:sync 
               -source:contentPath="$(AppOfflineAbsoluteSourcePath)" 
               -dest:contentPath="$(ContactManagerIisPath)/App_offline.htm",
                computerName="$(MSDeployComputerName)"
        </_Cmd>
      </PropertyGroup>
      <Exec Command="$(_Cmd)"/> 
    </Target>
    
  8. V tomto příkladu je vlastnost ContactManagerIisPath definována jinde v souboru projektu. Toto je jednoduše cesta k aplikaci služby IIS ve formátu [Název webu služby IIS]/[Název aplikace]. Zahrnutí podmínky do cíle umožňuje uživatelům zapnout nebo vypnout nasazení App_offline změnou hodnoty vlastnosti nebo zadáním parametru příkazového řádku.

  9. Přidejte nový cíl s názvem DeleteAppOffline. V rámci tohoto cíle vyvolejte příkaz MSDeploy.exe, který odebere soubor App_offline z cílového webového serveru.

    <Target Name="DeleteAppOffline" 
            Condition=" '$(EnableAppOffline'!='false' ">
      <PropertyGroup> 
        <_Cmd>"$(MSDeployPath)\msdeploy.exe" -verb:delete 
               -dest:contentPath="$(ContactManagerIisPath)/App_offline.htm",
                computerName="$(MSDeployComputerName)"
        </_Cmd>
      </PropertyGroup>
      <Exec Command="$(_Cmd)"/> 
    </Target>
    
  10. Posledním úkolem je vyvolat tyto nové cíle v příslušných bodech během provádění souboru projektu. Můžete to udělat různými způsoby. Například v souboru Publish.proj vlastnost FullPublishDependsOn určuje seznam cílů, které musí být provedeny v pořadí, kdy je vyvolán výchozí cíl FullPublish .

  11. Upravte soubor projektu MSBuild tak, aby v příslušných bodech procesu publikování vyvolal cíle DeployAppOffline a DeleteAppOffline .

    <PropertyGroup>
      <FullPublishDependsOn>
        Clean;
        BuildProjects; 
        DeployAppOffline;
        GatherPackagesForPublishing;
        PublishDbPackages;
        DeployTestDBPermissions;
        PublishWebPackages;
        DeleteAppOffline;
      </FullPublishDependsOn> 
    </PropertyGroup>
    <Target Name="FullPublish" DependsOnTargets="$(FullPublishDependsOn)" />
    

Při spuštění vlastního souboru projektu MSBuild se soubor App_offline nasadí na server okamžitě po úspěšném sestavení. Po dokončení všech úloh nasazení se pak odstraní ze serveru.

Přidání souboru App_Offline do balíčků nasazení

V závislosti na tom, jak nakonfigurujete nasazení, může být při nasazení webového balíčku do cíle automaticky odstraněn veškerý existující obsah cílové webové aplikace IIS, například souborApp_offline.htm . Abyste zajistili, že souborApp_offline.htm zůstane na místě po dobu trvání nasazení, musíte soubor zahrnout do samotného balíčku nasazení webu a nasadit ho přímo na začátku procesu nasazení.

  • Pokud jste postupovali podle předchozích úkolů v tomto tématu, přidáte souborApp_offline.htm do projektu webové aplikace pod jiným názvem (použili jsme App_offline-template.htm) a nastavíte akci sestavení na Hodnotu Žádné. Tyto změny jsou nezbytné k tomu, aby soubor nezasahoval do vývoje a ladění. V důsledku toho je potřeba přizpůsobit proces balení, abyste zajistili, že souborApp_offline.htm bude součástí balíčku pro nasazení webu.

Kanál publikování na webu (WPP) používá seznam položek s názvem FilesForPackagingFromProject k sestavení seznamu souborů, které by měly být součástí balíčku pro nasazení webu. Obsah webových balíčků můžete přizpůsobit přidáním vlastních položek do tohoto seznamu. K tomu je potřeba provést tyto základní kroky:

  1. Ve stejné složce jako soubor projektu vytvořte vlastní soubor projektu s názvem [název projektu].wpp.targets .

    Poznámka

    Soubor .wpp.targets musí být ve stejné složce jako soubor projektu webové aplikace – například ContactManager.Mvc.csproj – a ne ve stejné složce jako soubory vlastního projektu, které používáte k řízení procesu sestavení a nasazení.

  2. V souboru .wpp.targets vytvořte nový cíl nástroje MSBuild, který se spustí předcílem CopyAllFilesToSingleFolderForPackage . Toto je cíl WPP, který sestaví seznam věcí, které se mají zahrnout do balíčku.

  3. V novém cíli vytvořte element ItemGroup .

  4. V elementu ItemGroup přidejte položku FilesForPackagingFromProject a zadejte App_offline.htm soubor.

Soubor .wpp.targets by měl vypadat takto:

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="AddAppOfflineToPackage"
          BeforeTargets="CopyAllFilesToSingleFolderForPackage">
    <ItemGroup>   
      <FilesForPackagingFromProject Include="App_offline-template.htm">
        <DestinationRelativePath>App_offline.htm</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
  </Target>
</Project>

V tomto příkladu si všimněte těchto klíčových bodů:

  • Atribut BeforeTargets vloží tento cíl do WPP zadáním, že by měl být spuštěn bezprostředně před CopyAllFilesToSingleFolderForPackage cíl.
  • Položka FilesForPackagingFromProject používá hodnotu metadat DestinationRelativePath k přejmenování souboru z App_offline-template.htm na App_offline.htm , jak je přidán do seznamu.

Další postup ukazuje, jak přidat tento soubor .wpp.targets do projektu webové aplikace.

Přidání souboru .wpp.targets do balíčku nasazení webu

  1. Otevřete řešení v sadě Visual Studio 2010.

  2. V okně Průzkumník řešení klikněte pravým tlačítkem na uzel projektu webové aplikace (například ContactManager.Mvc), přejděte na Přidat a klikněte na Nová položka.

  3. V dialogovém okně Přidat novou položku vyberte šablonu Soubor XML .

  4. Do pole Název zadejte [název projektu].wpp.targets (například ContactManager.Mvc.wpp.targets) a klikněte na Přidat.

    Do pole Název zadejte název projektu .wpp.targets a pak klikněte na Přidat.

    Poznámka

    Pokud přidáte novou položku do kořenového uzlu projektu, soubor se vytvoří ve stejné složce jako soubor projektu. Můžete to ověřit otevřením složky v Průzkumníku Windows.

  5. Do souboru přidejte kód MSBuild popsaný výše.

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Target Name="AddAppOfflineToPackage"
              BeforeTargets="CopyAllFilesToSingleFolderForPackage">
        <ItemGroup>   
          <FilesForPackagingFromProject Include="App_offline-template.htm">
            <DestinationRelativePath>App_offline.htm</DestinationRelativePath>
        </FilesForPackagingFromProject>
      </ItemGroup>
      </Target>
    </Project>
    
  6. Uložte a zavřete soubor [název_projektu].wpp.targets .

Při příštím sestavení a zabalení projektu webové aplikace WPP automaticky rozpozná soubor .wpp.targets . Soubor App_offline-template.htm bude zahrnutý do výsledného balíčku pro nasazení webu jakoApp_offline.htm.

Poznámka

Pokud nasazení selže, souborApp_offline.htm zůstane na místě a aplikace zůstane offline. Obvykle se jedná o požadované chování. Pokud chcete aplikaci převést zpátky do online režimu, můžete z webového serveru odstranit souborApp_offline.htm . Případně pokud opravíte chyby a úspěšně spustíte nasazení, souborApp_offline.htm se odebere.

Závěr

Toto téma popisuje, jak po dobu nasazení převést webovou aplikaci do režimu offline publikováním souboruApp_offline.htm na cílový server na začátku procesu nasazení a jeho odebráním na konci. Popisuje také, jak do balíčku pro nasazení webu zahrnout souborApp_offline.htm .

Další čtení

Další informace o procesu balení a nasazení najdete v tématech Sestavení a balení projektů webových aplikací, Konfigurace parametrů pro nasazení webového balíčku a Nasazení webových balíčků.

Pokud webové aplikace publikujete přímo ze sady Visual Studio, místo použití vlastního přístupu k souboru projektu MSBuild popsaného v těchto kurzech budete muset použít trochu jiný přístup, abyste aplikaci během procesu publikování převeli do offline režimu.