Hostování ASP.NET Core ve službě Windows Service

Aplikaci ASP.NET Core můžete hostovat ve službě Windows jako Windows bez použití služby IIS. Při hostování jako Windows service se aplikace automaticky spustí po restartování serveru.

Zobrazení nebo stažení ukázkového kódu (stažení)

Požadavky

Šablona služby pracovního procesu

Šablona ASP.NET Core Worker Service poskytuje výchozí bod pro psaní dlouhotrvacích aplikací služby. Použití šablony jako základu pro aplikaci Windows Service:

  1. Vytvořte aplikaci Služby pracovního procesu ze šablony .NET Core.
  2. Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci služby pracovního procesu, aby ji bylo možné spustit jako Windows Service.
  1. Vytvoření nového projektu
  2. Vyberte Službu pracovního procesu. Vyberte Další.
  3. Do pole Název projektu zadejte název projektu nebo přijměte výchozí název projektu. Vyberte Vytvořit.
  4. V dialogovém okně Create a new Worker service (Vytvořit novou službu pracovního procesu) vyberte Create (Vytvořit).

Konfigurace aplikací

Aplikace vyžaduje odkaz na balíček pro Microsoft.Extensions.Hosting.WindowsServices.

IHostBuilder.UseWindowsService se volá při sestavování hostitele. Pokud je aplikace spuštěná jako Windows Service, metoda :

  • Nastaví životnost hostitele na WindowsServiceLifetime .
  • Nastaví kořen obsahu na AppContext.BaseDirectory. Další informace najdete v části Aktuální adresář a kořenový adresář obsahu.
  • Umožňuje protokolování do protokolu událostí:
    • Název aplikace se použije jako výchozí název zdroje.
    • Výchozí úroveň protokolu je Upozornění nebo vyšší pro aplikaci na základě šablony ASP.NET Core, která volá sestavení CreateDefaultBuilder hostitele.
    • Přepište výchozí úroveň protokolu klíčem Logging:EventLog:LogLevel:Default v appsettings.json / appsettings.{ Environment}.json nebo jiný poskytovatel konfigurace.
    • Nové zdroje událostí můžou vytvářet jenom správci. Pokud zdroj událostí nelze vytvořit pomocí názvu aplikace, do zdroje aplikace se zaprotokoluje upozornění a protokoly událostí jsou zakázané.

V CreateHostBuilder souboru Program.cs:

Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    ...

Toto téma doprovází následující ukázkové aplikace:

  • Ukázka služby pracovního procesu na pozadí: Ukázka jiné než webové aplikace založené na šabloně služby pracovního procesu, která používá hostované služby pro úlohy na pozadí.
  • Ukázka App Service webu: Ukázka webové aplikace Pages, která se spouští jako služba Windows s hostovanou službou Razor pro úlohy na pozadí.

Pokyny k MVC najdete v článcích v části a Přehled ASP.NET Core MVC migrace z ASP.NET Core 2,2 na 3,0 .

Typ nasazení

Informace a rady ke scénářům nasazení najdete v tématu Nasazení aplikace .NET Core.

Sada SDK

Pro službu založenou na webové aplikaci, která používá architektury Pages nebo MVC, zadejte webovou sadu Razor SDK v souboru projektu:

<Project Sdk="Microsoft.NET.Sdk.Web">

Pokud služba provádí pouze úlohy na pozadí (například hostované služby),zadejte do souboru projektu sadu Sdk pracovního procesu:

<Project Sdk="Microsoft.NET.Sdk.Worker">

Nasazení závislé na rozhraní (FDD)

Nasazení závislé na rozhraní (FDD) spoléhá na přítomnost sdílené verze .NET Core pro systém v cílovém systému. Když se scénář FDD použije podle pokynů v tomto článku, sada SDK vytvoří spustitelný soubor (.exe), který se nazývá spustitelný soubor závislý na rozhraní.

Pokud používáte webovou sadu SDK, web.config, který se obvykle vyprodukuje při publikování aplikace ASP.NET Core, není pro aplikaci Windows Services potřeba. Pokud chcete zakázat vytváření souboru web.config, přidejte <IsTransformWebConfigDisabled> vlastnost nastavenou na true .

<PropertyGroup>
  <TargetFramework>netcoreapp3.0</TargetFramework>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Samostatné nasazení (SCD)

Samostatné nasazení (SCD) nespoléhá na přítomnost sdílené architektury v hostitelském systému. Modul runtime a závislosti aplikace se nasadí s aplikací.

Identifikátor WINDOWS (RID) je součástí , <PropertyGroup> který obsahuje cílovou rozhraní:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

Publikování pro více identifikátorů RID:

  • Zadejte identifikátory GUID v seznamu odděleném středníkem.
  • Použijte název vlastnosti <RuntimeIdentifiers> (množné číslo).

Další informace najdete v tématu Katalog .NET Core RID.

Uživatelský účet služby

Pokud chcete vytvořit uživatelský účet pro službu, použijte rutinu New-LocalUser z příkazového prostředí PowerShellu 6 pro správu.

V Aktualizace Windows 10 z října 2018 (verze 1809/build 10.0.17763) nebo novější:

New-LocalUser -Name {SERVICE NAME}

V Windows operačním systému starším než Aktualizace Windows 10 z října 2018 (verze 1809/build 10.0.17763):

powershell -Command "New-LocalUser -Name {SERVICE NAME}"

Po zobrazení výzvy zadejte silné heslo.

Pokud -AccountExpires rutině New-LocalUser nezadáte parametr s vypršením platnosti, nevyprší DateTime platnost účtu.

Další informace najdete v tématu Microsoft.PowerShell.LocalAccounts a Uživatelské účty služby.

Alternativním přístupem ke správě uživatelů při používání služby Active Directory je použití účtů spravované služby. Další informace najdete v tématu Přehled skupinových účtů spravované služby.

Přihlášení jako práva služby

Vytvoření oprávnění Přihlásit se jako služba pro uživatelský účet služby:

  1. Spuštěním souboru secpol.msc otevřete editor Místních zásad zabezpečení.
  2. Rozbalte uzel Místní zásady a vyberte Přiřazení uživatelských práv.
  3. Otevřete zásadu Přihlásit se jako služba.
  4. Vyberte Přidat uživatele nebo skupinu.
  5. Zadejte název objektu (uživatelský účet) pomocí jednoho z následujících přístupů:
    1. Do pole název objektu zadejte uživatelský účet ( {DOMAIN OR COMPUTER NAME\USER} ) a výběrem OK přidejte uživatele do zásad.
    2. Vyberte Upřesnit. Vyberte Najít. V seznamu vyberte uživatelský účet. Vyberte OK. Znovu vyberte OK a přidejte uživatele k zásadám.
  6. Pokud chcete změny přijmout, vyberte OK nebo Použít.

Vytvoření a správa služby Windows Service

Vytvoření služby

Pomocí příkazů PowerShellu zaregistrujte službu. V příkazovém prostředí PowerShellu 6 pro správu spusťte následující příkazy:

$acl = Get-Acl "{EXE PATH}"
$aclRuleArgs = "{DOMAIN OR COMPUTER NAME\USER}", "Read,Write,ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($aclRuleArgs)
$acl.SetAccessRule($accessRule)
$acl | Set-Acl "{EXE PATH}"

New-Service -Name {SERVICE NAME} -BinaryPathName "{EXE FILE PATH}" -Credential "{DOMAIN OR COMPUTER NAME\USER}" -Description "{DESCRIPTION}" -DisplayName "{DISPLAY NAME}" -StartupType Automatic
  • {EXE PATH}: Cesta ke složce aplikace na hostiteli (například d:\myservice ). Do cesty nezahrnujte spustitelný soubor aplikace. Koncové lomítko se nevyžaduje.
  • {DOMAIN OR COMPUTER NAME\USER}: Uživatelský účet služby (například Contoso\ServiceUser ).
  • {SERVICE NAME}: Název služby (například MyService ).
  • {EXE FILE PATH}: Spustitelný soubor aplikace (například d:\myservice\myservice.exe ). Zahrnte název spustitelného souboru s příponou .
  • {DESCRIPTION}: Popis služby (například My sample service ).
  • {DISPLAY NAME}: Zobrazovaný název služby (například My Service ).

Spuštění služby

Spusťte službu pomocí následujícího příkazu PowerShellu 6:

Start-Service -Name {SERVICE NAME}

Spuštění služby příkazem trvá několik sekund.

Určení stavu služby

Ke kontrole stavu služby použijte následující příkaz PowerShellu 6:

Get-Service -Name {SERVICE NAME}

Stav je hlášen jako jedna z následujících hodnot:

  • Starting
  • Running
  • Stopping
  • Stopped

Zastavení služby

Pomocí následujícího příkazu PowerShellu 6 zastavte službu:

Stop-Service -Name {SERVICE NAME}

Odebrání služby

Po krátké prodlevě zastavení služby odeberte službu pomocí následujícího příkazu PowerShellu 6:

Remove-Service -Name {SERVICE NAME}

Scénáře proxy serveru a nástroje pro vyrovnávání zatížení

Služby, které komunikují s požadavky z internetu nebo podnikové sítě a jsou za proxy serverem nebo nástroji pro vyrovnávání zatížení, můžou vyžadovat další konfiguraci. Další informace naleznete v tématu Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení.

Konfigurace koncových bodů

Ve výchozím nastavení ASP.NET Core vytvoří vazbu na http://localhost:5000 . Nakonfigurujte adresu URL a port nastavením ASPNETCORE_URLS proměnné prostředí.

Další přístupy ke konfiguraci adres URL a portů najdete v příslušném článku o serveru:

Předchozí pokyny se věnuje podpoře koncových bodů HTTPS. Můžete například nakonfigurovat aplikaci pro PROTOKOL HTTPS při použití ověřování s Windows Service.

Poznámka

Použití vývojového ASP.NET Core HTTPS k zabezpečení koncového bodu služby se nepodporuje.

Aktuální adresář a kořenový adresář obsahu

Aktuální pracovní adresář vrácený voláním GetCurrentDirectory pro službu Windows je složka C: WINDOWS \ \ system32. Složka system32 není vhodným umístěním pro ukládání souborů služby (například souborů nastavení). Při údržbě a přístupu k prostředkům a souborům nastavení služby použijte jeden z následujících přístupů.

Použití ContentRootPath nebo ContentRootFileProvider

K vyhledání prostředků aplikace použijte IHostEnvironment.ContentRootPath ContentRootFileProvider nebo .

Když aplikace běží jako služba, UseWindowsService nastaví na ContentRootPath AppContext.BaseDirectory.

Výchozí soubory nastavení aplikace a appsettings.json nastavení aplikace.{ Environment}.json se načítá z kořenového adresáře obsahu aplikace voláním metody CreateDefaultBuilder během vytváření hostitele.

U jiných souborů nastavení načtených kódem vývojáře v není nutné ConfigureAppConfiguration volat SetBasePath . V následujícím příkladu existuje soubor custom_settings.json v kořenovém adresáři obsahu aplikace a načítá se bez explicitního nastavení základní cesty:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddJsonFile("custom_settings.json");
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });
}

Nepokoušejte se použít k získání cesty k prostředku, protože aplikace Windows Service jako svůj aktuální adresář vrátí složku GetCurrentDirectory C: \ WINDOWS \ system32.

Uložení souborů služby ve vhodném umístění na disku

Při použití příkazu zadejte absolutní SetBasePath cestu ke IConfigurationBuilder složce, která obsahuje soubory.

Řešení potíží

Informace o řešení potíží Windows Service najdete v tématu řešení potíží a ladění ASP.NET Corech projektů .

Běžné chyby

  • Používá se stará nebo předběžná verze PowerShellu.
  • Zaregistrovaná služba nevyu používá publikovaný výstup aplikace z dotnet publish. Výstup příkazu dotnet build se pro nasazení aplikace nepodporuje. Publikované prostředky se nacházejí v jedné z následujících složek v závislosti na typu nasazení:
    • bin/Release/{TARGET FRAMEWORK}/publish (FDD)
    • bin/Release/{TARGET FRAMEWORK}/{RUNTIME IDENTIFIER}/publish (SCD)
  • Služba není ve stavu SPUŠTĚNO.
  • Cesty k prostředkům, které aplikace používá (například certifikáty), jsou nesprávné. Základní cesta služby Windows je c: \ Windows \ System32.
  • Uživatel nemá práva Přihlásit se jako služba.
  • Při spuštění příkazu PowerShellu vypršela platnost hesla uživatele nebo se mu New-Service nesprávně předá.
  • Aplikace vyžaduje ASP.NET Core, ale není nakonfigurovaná pro zabezpečená připojení (HTTPS).
  • Port adresy URL požadavku je v aplikaci nesprávný nebo není správně nakonfigurovaný.

Protokoly událostí systému a aplikací

Přístup k protokolům systémových a aplikačních událostí:

  1. Otevřete nabídka Start, vyhledejte Prohlížeč událostí a vyberte aplikaci Prohlížeč událostí.
  2. V Prohlížeč událostí otevřete uzel Windows Protokoly.
  3. Výběrem možnosti Systém otevřete protokol systémových událostí. Výběrem možnosti Aplikace otevřete protokol událostí aplikace.
  4. Vyhledejte chyby související s aplikací, která selhává.

Spuštění aplikace na příkazovém řádku

Mnoho chyb při spuštění nevytváří v protokolech událostí užitečné informace. Příčinu některých chyb můžete zjistit spuštěním aplikace na příkazovém řádku hostitelského systému. Pokud chcete z aplikace protokolovat další podrobnosti, snižte úroveň protokolu nebo spusťte aplikaci ve vývojovém prostředí.

Vymazání mezipamětí balíčků

Funkční aplikace může selhat okamžitě po upgradu .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v rámci aplikace. V některých případech balíčky, které jsou v souladu s balíčky, mohou při provádění významných upgradů přerušit aplikaci. Většinu těchto problémů můžete vyřešit pomocí těchto pokynů:

  1. Odstraňte složky bin a obj.

  2. Vymažte mezipaměti balíčků spuštěním příkazu dotnet nuget locals all --clear z příkazového prostředí.

    Vymazání mezipamětí balíčků lze provést také pomocí nástrojenuget.exe a spuštěním příkazu nuget locals all -clear . nuget.exe není součástí instalace s desktopovou Windows a je nutné ji získat odděleně od NuGet webu.

  3. Obnovte a znovu sestavte projekt.

  4. Před znovunasazování aplikace odstraňte všechny soubory ve složce nasazení na serveru.

Pomalá nebo nereagující aplikace

Výpis stavu systému je snímek paměti systému a může pomoct určit příčinu chyby aplikace, selhání spuštění nebo pomalé aplikace.

Aplikace dojde k chybě nebo dojde k výjimce

Získání a analýza výpisu paměti Zasílání zpráv o chybách systému Windows (WER):

  1. Vytvořte složku pro umístění souborů s výpisem stavu systému na adrese c:\dumps .

  2. Spusťte powershellový skript EnableDumps s názvem spustitelného souboru aplikace:

    .\EnableDumps {APPLICATION EXE} c:\dumps
    
  3. Spusťte aplikaci za podmínek, které způsobí selhání.

  4. Po chybě spusťte powershellový skript DisableDumps:

    .\DisableDumps {APPLICATION EXE}
    

Po chybě aplikace a dokončení shromažďování výpisů paměti se aplikace může normálně ukončit. Skript PowerShellu nakonfiguruje WER tak, aby na jednu aplikaci shromažďoval až pět výpisů paměti.

Upozornění

Výpisy stavu systému můžou za trvat velké množství místa na disku (každý až několik gigabajtů).

Aplikace nereaguje, selže při spuštění nebo běží normálně

Když aplikace přestane reagovat (přestane reagovat, ale nehavaruje), při spuštění selže nebo se spustí normálně, podívejte se na článek Soubory s výpisem stavu systému v uživatelském režimu: Výběr nejlepšího nástroje pro výběr vhodného nástroje pro vytvoření výpisu stavu systému.

Analýza výpisu paměti

Výpis paměti lze analyzovat pomocí několika přístupů. Další informace najdete v tématu Analýza User-Mode výpisu stavu systému.

Další zdroje informací

Aplikaci ASP.NET Core můžete hostovat ve službě Windows jako Windows bez použití služby IIS. Při hostování jako Windows service se aplikace automaticky spustí po restartování serveru.

Zobrazení nebo stažení ukázkového kódu (stažení)

Požadavky

Konfigurace aplikací

Aplikace vyžaduje odkazy na balíček pro Microsoft.AspNetCore.Hosting.WindowsServices a Microsoft.Extensions.Logging.EventLog.

Pokud chcete testovat a ladit při spuštění mimo službu, přidejte kód, který určí, jestli aplikace běží jako služba nebo konzolová aplikace. Zkontrolujte, jestli je ladicí program připojený nebo --console jestli je k dispozici přepínač. Pokud má která z těchto podmínek hodnotu true (aplikace se nespouštěl jako služba), zavolejte Run . Pokud jsou podmínky nepravdivé (aplikace se spustí jako služba):

Vzhledem k tomu, že zprostředkovatel konfigurace příkazového řádku vyžaduje páry název-hodnota pro argumenty příkazového řádku, je přepínač před přijetím argumentů odebrán --console z CreateDefaultBuilder argumentů.

Pokud chcete zapisovat do protokolu Windows událostí, přidejte zprostředkovatele protokolu událostí do ConfigureLogging . Nastavte úroveň protokolování s Logging:LogLevel:Default klíčem v nastavení aplikace. Soubor Production.json.

V následujícím příkladu z ukázkové aplikace se volá místo pro zpracování RunAsCustomService RunAsService událostí životnosti v rámci aplikace. Další informace najdete v části Zpracování událostí spouštění a zastavování.

public class Program
{
    public static void Main(string[] args)
    {
        var isService = !(Debugger.IsAttached || args.Contains("--console"));
        
        if (isService)
        {
            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            Directory.SetCurrentDirectory(pathToContentRoot);
        }

        var builder = CreateWebHostBuilder(
            args.Where(arg => arg != "--console").ToArray());

        var host = builder.Build();

        if (isService)
        {
            // To run the app without the CustomWebHostService change the
            // next line to host.RunAsService();
            host.RunAsCustomService();
        }
        else
        {
            host.Run();
        }
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddEventLog();
            })
            .ConfigureAppConfiguration((context, config) =>
            {
                // Configure the app here.
            })
            .UseStartup<Startup>();
}

Typ nasazení

Informace a rady ke scénářům nasazení najdete v tématu Nasazení aplikace .NET Core.

Sada SDK

Pro službu založenou na webové aplikaci, která používá architektury Pages nebo MVC, zadejte webovou sadu Razor SDK v souboru projektu:

<Project Sdk="Microsoft.NET.Sdk.Web">

Pokud služba provádí pouze úlohy na pozadí (například hostované služby),zadejte do souboru projektu sadu Sdk pracovního procesu:

<Project Sdk="Microsoft.NET.Sdk.Worker">

Nasazení závislé na rozhraní (FDD)

Nasazení závislé na rozhraní (FDD) spoléhá na přítomnost sdílené verze .NET Core pro systém v cílovém systému. Když se scénář FDD použije podle pokynů v tomto článku, sada SDK vytvoří spustitelný soubor (.exe), který se nazývá spustitelný soubor závislý na rozhraní.

Identifikátor WINDOWS (RID) ( <RuntimeIdentifier> ) obsahuje cílovou rozhraní. V následujícím příkladu je rid nastavený na win7-x64 . Vlastnost <SelfContained> je nastavena na hodnotu false. Tyto vlastnosti instruují sadu SDK, aby vygeneroval spustitelný soubor (.exe) pro Windows a aplikaci, která závisí na sdíleném rozhraní .NET Core.

Soubor web.config, který se obvykle vyprodukuje při publikování ASP.NET Core aplikace, není pro aplikaci Windows Services nutný. Pokud chcete zakázat vytváření souboru web.config, přidejte <IsTransformWebConfigDisabled> vlastnost nastavenou na true .

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
  <SelfContained>false</SelfContained>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Samostatné nasazení (SCD)

Samostatné nasazení (SCD) nespoléhá na přítomnost sdílené architektury v hostitelském systému. Modul runtime a závislosti aplikace se nasadí s aplikací.

Identifikátor WINDOWS (RID) je součástí , <PropertyGroup> který obsahuje cílovou rozhraní:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

Publikování pro více identifikátorů RID:

  • Zadejte identifikátory GUID v seznamu odděleném středníkem.
  • Použijte název vlastnosti <RuntimeIdentifiers> (množné číslo).

Další informace najdete v tématu Katalog .NET Core RID.

Vlastnost <SelfContained> je nastavená na true :

<SelfContained>true</SelfContained>

Uživatelský účet služby

Pokud chcete vytvořit uživatelský účet pro službu, použijte rutinu New-LocalUser z příkazového prostředí PowerShellu 6 pro správu.

V Aktualizace Windows 10 z října 2018 (verze 1809/build 10.0.17763) nebo novější:

New-LocalUser -Name {SERVICE NAME}

V Windows operačním systému starším než Aktualizace Windows 10 z října 2018 (verze 1809/build 10.0.17763):

powershell -Command "New-LocalUser -Name {SERVICE NAME}"

Po zobrazení výzvy zadejte silné heslo.

Pokud -AccountExpires rutině New-LocalUser nezadáte parametr s vypršením platnosti, nevyprší DateTime platnost účtu.

Další informace najdete v tématu Microsoft.PowerShell.LocalAccounts a Uživatelské účty služby.

Alternativním přístupem ke správě uživatelů při používání služby Active Directory je použití účtů spravované služby. Další informace najdete v tématu Přehled skupinových účtů spravované služby.

Přihlášení jako práva služby

Vytvoření oprávnění Přihlásit se jako služba pro uživatelský účet služby:

  1. Spuštěním souboru secpol.msc otevřete editor Místních zásad zabezpečení.
  2. Rozbalte uzel Místní zásady a vyberte Přiřazení uživatelských práv.
  3. Otevřete zásadu Přihlásit se jako služba.
  4. Vyberte Přidat uživatele nebo skupinu.
  5. Zadejte název objektu (uživatelský účet) pomocí jednoho z následujících přístupů:
    1. Do pole název objektu zadejte uživatelský účet ( {DOMAIN OR COMPUTER NAME\USER} ) a výběrem OK přidejte uživatele do zásad.
    2. Vyberte Upřesnit. Vyberte Najít. V seznamu vyberte uživatelský účet. Vyberte OK. Znovu vyberte OK a přidejte uživatele k zásadám.
  6. Pokud chcete změny přijmout, vyberte OK nebo Použít.

Vytvoření a správa služby Windows Service

Vytvoření služby

Pomocí příkazů PowerShellu zaregistrujte službu. V příkazovém prostředí PowerShellu 6 pro správu spusťte následující příkazy:

$acl = Get-Acl "{EXE PATH}"
$aclRuleArgs = {DOMAIN OR COMPUTER NAME\USER}, "Read,Write,ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($aclRuleArgs)
$acl.SetAccessRule($accessRule)
$acl | Set-Acl "{EXE PATH}"

New-Service -Name {SERVICE NAME} -BinaryPathName {EXE FILE PATH} -Credential {DOMAIN OR COMPUTER NAME\USER} -Description "{DESCRIPTION}" -DisplayName "{DISPLAY NAME}" -StartupType Automatic
  • {EXE PATH}: Cesta ke složce aplikace na hostiteli (například d:\myservice ). Do cesty nezahrnujte spustitelný soubor aplikace. Koncové lomítko se nevyžaduje.
  • {DOMAIN OR COMPUTER NAME\USER}: Uživatelský účet služby (například Contoso\ServiceUser ).
  • {SERVICE NAME}: Název služby (například MyService ).
  • {EXE FILE PATH}: Spustitelný soubor aplikace (například d:\myservice\myservice.exe ). Zahrnte název spustitelného souboru s příponou .
  • {DESCRIPTION}: Popis služby (například My sample service ).
  • {DISPLAY NAME}: Zobrazovaný název služby (například My Service ).

Spuštění služby

Spusťte službu pomocí následujícího příkazu PowerShellu 6:

Start-Service -Name {SERVICE NAME}

Spuštění služby příkazem trvá několik sekund.

Určení stavu služby

Ke kontrole stavu služby použijte následující příkaz PowerShellu 6:

Get-Service -Name {SERVICE NAME}

Stav je hlášen jako jedna z následujících hodnot:

  • Starting
  • Running
  • Stopping
  • Stopped

Zastavení služby

Pomocí následujícího příkazu PowerShellu 6 zastavte službu:

Stop-Service -Name {SERVICE NAME}

Odebrání služby

Po krátké prodlevě zastavení služby odeberte službu pomocí následujícího příkazu PowerShellu 6:

Remove-Service -Name {SERVICE NAME}

Zpracování událostí spuštění a zastavení

Zpracování OnStarting událostí OnStarted , OnStopping a:

  1. Vytvořte třídu odvozenou z pomocí WebHostService metod OnStarting , a OnStarted OnStopping :

    [DesignerCategory("Code")]
    internal class CustomWebHostService : WebHostService
    {
        private ILogger _logger;
    
        public CustomWebHostService(IWebHost host) : base(host)
        {
            _logger = host.Services
                .GetRequiredService<ILogger<CustomWebHostService>>();
        }
    
        protected override void OnStarting(string[] args)
        {
            _logger.LogInformation("OnStarting method called.");
            base.OnStarting(args);
        }
    
        protected override void OnStarted()
        {
            _logger.LogInformation("OnStarted method called.");
            base.OnStarted();
        }
    
        protected override void OnStopping()
        {
            _logger.LogInformation("OnStopping method called.");
            base.OnStopping();
        }
    }
    
  2. Vytvořte rozšiřující metodu pro IWebHost , která předá CustomWebHostService do Run :

    public static class WebHostServiceExtensions
    {
        public static void RunAsCustomService(this IWebHost host)
        {
            var webHostService = new CustomWebHostService(host);
            ServiceBase.Run(webHostService);
        }
    }
    
  3. V Program.Main volejte RunAsCustomService rozšiřující metodu místo RunAsService :

    host.RunAsCustomService();
    

    Pokud chcete zobrazit umístění v RunAsService souboru , podívejte se na Program.Main vzorový kód zobrazený v části Typ nasazení.

Scénáře proxy serveru a nástroje pro vyrovnávání zatížení

Služby, které komunikují s požadavky z internetu nebo podnikové sítě a jsou za proxy serverem nebo nástroji pro vyrovnávání zatížení, můžou vyžadovat další konfiguraci. Další informace naleznete v tématu Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení.

Konfigurace koncových bodů

Ve výchozím nastavení ASP.NET Core vytvoří vazbu na http://localhost:5000 . Nakonfigurujte adresu URL a port nastavením ASPNETCORE_URLS proměnné prostředí.

Další přístupy ke konfiguraci adres URL a portů najdete v příslušném článku o serveru:

Předchozí pokyny se věnuje podpoře koncových bodů HTTPS. Můžete například nakonfigurovat aplikaci pro HTTPS při použití ověřování s Windows Service.

Poznámka

Použití vývojového ASP.NET Core HTTPS k zabezpečení koncového bodu služby se nepodporuje.

Aktuální adresář a kořenový adresář obsahu

Aktuální pracovní adresář vrácený voláním GetCurrentDirectory pro službu Windows je složka C: WINDOWS \ \ system32. Složka system32 není vhodným umístěním pro ukládání souborů služby (například souborů nastavení). Při údržbě a přístupu k prostředkům a souborům nastavení služby použijte jeden z následujících přístupů.

Nastavte kořenovou cestu obsahu ke složce aplikace.

je ContentRootPath stejná cesta zadaná k binPath argumentu při vytvoření služby. Místo volání metody pro vytvoření cest k souborům nastavení volejte s cestou ke GetCurrentDirectory SetCurrentDirectory kořenovému adresáři obsahu aplikace.

V souboru určete cestu ke složce spustitelného souboru služby a pomocí cesty vytvořte kořen Program.Main obsahu aplikace:

var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
Directory.SetCurrentDirectory(pathToContentRoot);

CreateWebHostBuilder(args)
    .Build()
    .RunAsService();

Uložení souborů služby ve vhodném umístění na disku

Při použití příkazu zadejte absolutní SetBasePath cestu ke IConfigurationBuilder složce, která obsahuje soubory.

Řešení potíží

Informace o řešení potíží Windows Service najdete v tématu řešení potíží a ladění ASP.NET Corech projektů .

Běžné chyby

  • Používá se stará nebo předběžná verze PowerShellu.
  • Zaregistrovaná služba nevyu používá publikovaný výstup aplikace z dotnet publish. Výstup příkazu dotnet build se pro nasazení aplikace nepodporuje. Publikované prostředky se nacházejí v jedné z následujících složek v závislosti na typu nasazení:
    • bin/Release/{TARGET FRAMEWORK}/publish (FDD)
    • bin/Release/{TARGET FRAMEWORK}/{RUNTIME IDENTIFIER}/publish (SCD)
  • Služba není ve stavu SPUŠTĚNO.
  • Cesty k prostředkům, které aplikace používá (například certifikáty), jsou nesprávné. Základní cesta služby Windows je c: \ Windows \ System32.
  • Uživatel nemá práva Přihlásit se jako služba.
  • Při spuštění příkazu PowerShellu vypršela platnost hesla uživatele nebo se mu New-Service nesprávně předá.
  • Aplikace vyžaduje ASP.NET Core, ale není nakonfigurovaná pro zabezpečená připojení (HTTPS).
  • Port adresy URL požadavku je v aplikaci nesprávný nebo není správně nakonfigurovaný.

Protokoly událostí systému a aplikací

Přístup k protokolům systémových a aplikačních událostí:

  1. Otevřete nabídka Start, vyhledejte Prohlížeč událostí a vyberte aplikaci Prohlížeč událostí.
  2. V Prohlížeč událostí otevřete uzel Windows Protokoly.
  3. Výběrem možnosti Systém otevřete protokol systémových událostí. Výběrem možnosti Aplikace otevřete protokol událostí aplikace.
  4. Vyhledejte chyby související s aplikací, která selhává.

Spuštění aplikace na příkazovém řádku

Mnoho chyb při spuštění nevytváří v protokolech událostí užitečné informace. Příčinu některých chyb můžete zjistit spuštěním aplikace na příkazovém řádku hostitelského systému. Pokud chcete z aplikace protokolovat další podrobnosti, snižte úroveň protokolu nebo spusťte aplikaci ve vývojovém prostředí.

Vymazání mezipamětí balíčků

Funkční aplikace může selhat okamžitě po upgradu .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v rámci aplikace. V některých případech balíčky, které jsou v souladu s balíčky, mohou při provádění významných upgradů přerušit aplikaci. Většinu těchto problémů můžete vyřešit pomocí těchto pokynů:

  1. Odstraňte složky bin a obj.

  2. Vymažte mezipaměti balíčků spuštěním příkazu dotnet nuget locals all --clear z příkazového prostředí.

    Vymazání mezipamětí balíčků lze provést také pomocínuget.exe a spuštění příkazu nuget locals all -clear . nuget.exe není součástí instalace s desktopovou Windows a je nutné ji získat odděleně od NuGet webu.

  3. Obnovte a znovu sestavte projekt.

  4. Před znovunasazování aplikace odstraňte všechny soubory ve složce nasazení na serveru.

Pomalá nebo nereagující aplikace

Výpis stavu systému je snímek paměti systému a může pomoct určit příčinu chyby aplikace, selhání spuštění nebo pomalé aplikace.

Aplikace dojde k chybě nebo dojde k výjimce

Získání a analýza výpisu z Zasílání zpráv o chybách systému Windows (WER):

  1. Vytvořte složku pro umístění souborů s výpisem stavu systému na adrese c:\dumps .

  2. Spusťte powershellový skript EnableDumps s názvem spustitelného souboru aplikace:

    .\EnableDumps {APPLICATION EXE} c:\dumps
    
  3. Spusťte aplikaci za podmínek, které způsobí selhání.

  4. Po chybě spusťte powershellový skript DisableDumps:

    .\DisableDumps {APPLICATION EXE}
    

Po chybě aplikace a dokončení shromažďování výpisů paměti se aplikace může normálně ukončit. Skript PowerShellu nakonfiguruje WER tak, aby na jednu aplikaci shromažďoval až pět výpisů paměti.

Upozornění

Výpisy stavu systému můžou za trvat velké množství místa na disku (každý až několik gigabajtů).

Aplikace nereaguje, selže při spuštění nebo se spustí normálně

Když aplikace přestane reagovat (přestane reagovat, ale nehavaruje), při spuštění selže nebo se spustí normálně, podívejte se na článek Soubory s výpisem stavu systému v uživatelském režimu: Výběr nejlepšího nástroje pro výběr vhodného nástroje pro vytvoření výpisu stavu systému.

Analýza výpisu paměti

Výpis paměti lze analyzovat pomocí několika přístupů. Další informace najdete v tématu Analýza User-Mode výpisu stavu systému.

Další zdroje informací

Aplikaci ASP.NET Core můžete hostovat na Windows jako službu Windows bez použití služby IIS. Při hostování jako Windows service se aplikace automaticky spustí po restartování serveru.

Zobrazení nebo stažení ukázkového kódu (stažení)

Požadavky

Konfigurace aplikací

Aplikace vyžaduje odkazy na balíček pro Microsoft.AspNetCore.Hosting.WindowsServices a Microsoft.Extensions.Logging.EventLog.

Pokud chcete testovat a ladit při spuštění mimo službu, přidejte kód, který určí, jestli aplikace běží jako služba nebo konzolová aplikace. Zkontrolujte, jestli je ladicí program připojený nebo --console jestli je k dispozici přepínač. Pokud má která z těchto podmínek hodnotu true (aplikace se nespouštěl jako služba), zavolejte Run . Pokud jsou podmínky nepravdivé (aplikace se spustí jako služba):

Vzhledem k tomu, že zprostředkovatel konfigurace příkazového řádku vyžaduje páry název-hodnota pro argumenty příkazového řádku, je přepínač před přijetím argumentů odebrán --console z CreateDefaultBuilder argumentů.

Pokud chcete zapisovat do Windows protokolu událostí, přidejte zprostředkovatele protokolu událostí do ConfigureLogging . Nastavte úroveň protokolování s Logging:LogLevel:Default klíčem v nastavení aplikace. Soubor Production.json.

V následujícím příkladu z ukázkové aplikace se volá místo pro zpracování RunAsCustomService RunAsService událostí životnosti v rámci aplikace. Další informace najdete v části Zpracování událostí spouštění a zastavování.

public class Program
{
    public static void Main(string[] args)
    {
        var isService = !(Debugger.IsAttached || args.Contains("--console"));
        
        if (isService)
        {
            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            Directory.SetCurrentDirectory(pathToContentRoot);
        }

        var builder = CreateWebHostBuilder(
            args.Where(arg => arg != "--console").ToArray());

        var host = builder.Build();

        if (isService)
        {
            // To run the app without the CustomWebHostService change the
            // next line to host.RunAsService();
            host.RunAsCustomService();
        }
        else
        {
            host.Run();
        }
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddEventLog();
            })
            .ConfigureAppConfiguration((context, config) =>
            {
                // Configure the app here.
            })
            .UseStartup<Startup>();
}

Typ nasazení

Informace a rady ke scénářům nasazení najdete v tématu Nasazení aplikace .NET Core.

Sada SDK

Pro službu založenou na webové aplikaci, která používá architektury Pages nebo MVC, zadejte webovou sadu Razor SDK v souboru projektu:

<Project Sdk="Microsoft.NET.Sdk.Web">

Pokud služba provádí pouze úlohy na pozadí (například hostované služby),zadejte do souboru projektu sadu Sdk pracovního procesu:

<Project Sdk="Microsoft.NET.Sdk.Worker">

Nasazení závislé na rozhraní (FDD)

Nasazení závislé na rozhraní (FDD) spoléhá na přítomnost sdílené verze .NET Core pro systém v cílovém systému. Když se scénář FDD použije podle pokynů v tomto článku, sada SDK vytvoří spustitelný soubor (.exe), který se nazývá spustitelný soubor závislý na rozhraní.

Identifikátor Windows (RID) ( <RuntimeIdentifier> ) obsahuje cílovou rozhraní. V následujícím příkladu je rid nastavený na win7-x64 . Vlastnost <SelfContained> je nastavena na hodnotu false. Tyto vlastnosti instruují sadu SDK, aby vygeneroval spustitelný soubor (.exe) pro Windows a aplikaci, která závisí na sdíleném rozhraní .NET Core.

Vlastnost <UseAppHost> je nastavena na hodnotu true. Tato vlastnost poskytuje službě aktivační cestu (spustitelný soubor, .exe) pro FDD.

Soubor web.config, který se obvykle vyprodukuje při publikování aplikace ASP.NET Core, není pro aplikaci služby Windows Services nutný. Pokud chcete zakázat vytváření souboru web.config, přidejte <IsTransformWebConfigDisabled> vlastnost nastavenou na true .

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
  <UseAppHost>true</UseAppHost>
  <SelfContained>false</SelfContained>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Samostatné nasazení (SCD)

Samostatné nasazení (SCD) nespoléhá na přítomnost sdílené architektury v hostitelském systému. Modul runtime a závislosti aplikace se nasadí s aplikací.

Identifikátor WINDOWS (RID) je součástí , <PropertyGroup> který obsahuje cílovou rozhraní:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

Publikování pro více identifikátorů RID:

  • Zadejte identifikátory GUID v seznamu odděleném středníkem.
  • Použijte název vlastnosti <RuntimeIdentifiers> (množné číslo).

Další informace najdete v tématu Katalog .NET Core RID.

Vlastnost <SelfContained> je nastavená na true :

<SelfContained>true</SelfContained>

Uživatelský účet služby

Pokud chcete vytvořit uživatelský účet pro službu, použijte rutinu New-LocalUser z příkazového prostředí PowerShellu 6 pro správu.

V Aktualizace Windows 10 z října 2018 (verze 1809/build 10.0.17763) nebo novější:

New-LocalUser -Name {SERVICE NAME}

V Windows operačním systému starším než Aktualizace Windows 10 z října 2018 (verze 1809/build 10.0.17763):

powershell -Command "New-LocalUser -Name {SERVICE NAME}"

Po zobrazení výzvy zadejte silné heslo.

Pokud -AccountExpires rutině New-LocalUser nezadáte parametr s vypršením platnosti, nevyprší DateTime platnost účtu.

Další informace najdete v tématu Microsoft.PowerShell.LocalAccounts a Uživatelské účty služby.

Alternativním přístupem ke správě uživatelů při používání služby Active Directory je použití účtů spravované služby. Další informace najdete v tématu Přehled skupinových účtů spravované služby.

Přihlášení jako práva služby

Vytvoření oprávnění Přihlásit se jako služba pro uživatelský účet služby:

  1. Spuštěním souboru secpol.msc otevřete editor Místních zásad zabezpečení.
  2. Rozbalte uzel Místní zásady a vyberte Přiřazení uživatelských práv.
  3. Otevřete zásadu Přihlásit se jako služba.
  4. Vyberte Přidat uživatele nebo skupinu.
  5. Zadejte název objektu (uživatelský účet) pomocí jednoho z následujících přístupů:
    1. Do pole název objektu zadejte uživatelský účet ( {DOMAIN OR COMPUTER NAME\USER} ) a výběrem OK přidejte uživatele do zásad.
    2. Vyberte Upřesnit. Vyberte Najít. V seznamu vyberte uživatelský účet. Vyberte OK. Znovu vyberte OK a přidejte uživatele k zásadám.
  6. Pokud chcete změny přijmout, vyberte OK nebo Použít.

Vytvoření a správa služby Windows Service

Vytvoření služby

Pomocí příkazů PowerShellu zaregistrujte službu. V příkazovém prostředí PowerShellu 6 pro správu spusťte následující příkazy:

$acl = Get-Acl "{EXE PATH}"
$aclRuleArgs = {DOMAIN OR COMPUTER NAME\USER}, "Read,Write,ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($aclRuleArgs)
$acl.SetAccessRule($accessRule)
$acl | Set-Acl "{EXE PATH}"

New-Service -Name {SERVICE NAME} -BinaryPathName {EXE FILE PATH} -Credential {DOMAIN OR COMPUTER NAME\USER} -Description "{DESCRIPTION}" -DisplayName "{DISPLAY NAME}" -StartupType Automatic
  • {EXE PATH}: Cesta ke složce aplikace na hostiteli (například d:\myservice ). Do cesty nezahrnujte spustitelný soubor aplikace. Koncové lomítko se nevyžaduje.
  • {DOMAIN OR COMPUTER NAME\USER}: Uživatelský účet služby (například Contoso\ServiceUser ).
  • {SERVICE NAME}: Název služby (například MyService ).
  • {EXE FILE PATH}: Spustitelný soubor aplikace (například d:\myservice\myservice.exe ). Zahrnte název spustitelného souboru s příponou .
  • {DESCRIPTION}: Popis služby (například My sample service ).
  • {DISPLAY NAME}: Zobrazovaný název služby (například My Service ).

Spuštění služby

Spusťte službu pomocí následujícího příkazu PowerShellu 6:

Start-Service -Name {SERVICE NAME}

Spuštění služby příkazem trvá několik sekund.

Určení stavu služby

Ke kontrole stavu služby použijte následující příkaz PowerShellu 6:

Get-Service -Name {SERVICE NAME}

Stav je hlášen jako jedna z následujících hodnot:

  • Starting
  • Running
  • Stopping
  • Stopped

Zastavení služby

Pomocí následujícího příkazu PowerShellu 6 zastavte službu:

Stop-Service -Name {SERVICE NAME}

Odebrání služby

Po krátké prodlevě zastavení služby odeberte službu pomocí následujícího příkazu PowerShellu 6:

Remove-Service -Name {SERVICE NAME}

Zpracování událostí spuštění a zastavení

Zpracování OnStarting událostí OnStarted , OnStopping a:

  1. Vytvořte třídu odvozenou z pomocí WebHostService metod OnStarting , a OnStarted OnStopping :

    [DesignerCategory("Code")]
    internal class CustomWebHostService : WebHostService
    {
        private ILogger _logger;
    
        public CustomWebHostService(IWebHost host) : base(host)
        {
            _logger = host.Services
                .GetRequiredService<ILogger<CustomWebHostService>>();
        }
    
        protected override void OnStarting(string[] args)
        {
            _logger.LogInformation("OnStarting method called.");
            base.OnStarting(args);
        }
    
        protected override void OnStarted()
        {
            _logger.LogInformation("OnStarted method called.");
            base.OnStarted();
        }
    
        protected override void OnStopping()
        {
            _logger.LogInformation("OnStopping method called.");
            base.OnStopping();
        }
    }
    
  2. Vytvořte rozšiřující metodu pro IWebHost , která předá CustomWebHostService do Run :

    public static class WebHostServiceExtensions
    {
        public static void RunAsCustomService(this IWebHost host)
        {
            var webHostService = new CustomWebHostService(host);
            ServiceBase.Run(webHostService);
        }
    }
    
  3. V Program.Main volejte RunAsCustomService rozšiřující metodu místo RunAsService :

    host.RunAsCustomService();
    

    Pokud chcete zobrazit umístění v RunAsService souboru , podívejte se na Program.Main vzorový kód zobrazený v části Typ nasazení.

Scénáře proxy serveru a nástroje pro vyrovnávání zatížení

Služby, které komunikují s požadavky z internetu nebo podnikové sítě a jsou za proxy serverem nebo nástroji pro vyrovnávání zatížení, můžou vyžadovat další konfiguraci. Další informace naleznete v tématu Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení.

Konfigurace koncových bodů

Ve výchozím nastavení ASP.NET Core vytvoří vazbu na http://localhost:5000 . Nakonfigurujte adresu URL a port nastavením ASPNETCORE_URLS proměnné prostředí.

Další přístupy ke konfiguraci adres URL a portů najdete v příslušném článku o serveru:

Předchozí pokyny se věnuje podpoře koncových bodů HTTPS. Můžete například nakonfigurovat aplikaci pro PROTOKOL HTTPS při použití ověřování s Windows Service.

Poznámka

Použití vývojového ASP.NET Core HTTPS k zabezpečení koncového bodu služby se nepodporuje.

Aktuální adresář a kořenový adresář obsahu

Aktuální pracovní adresář vrácený voláním GetCurrentDirectory pro službu Windows je složka C: WINDOWS \ \ system32. Složka system32 není vhodným umístěním pro ukládání souborů služby (například souborů nastavení). Při údržbě a přístupu k prostředkům a souborům nastavení služby použijte jeden z následujících přístupů.

Nastavte kořenovou cestu obsahu ke složce aplikace.

je ContentRootPath stejná cesta zadaná k binPath argumentu při vytvoření služby. Místo volání metody pro vytvoření cest k souborům nastavení volejte s cestou ke GetCurrentDirectory SetCurrentDirectory kořenovému adresáři obsahu aplikace.

V souboru určete cestu ke složce spustitelného souboru služby a pomocí cesty vytvořte kořen Program.Main obsahu aplikace:

var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
Directory.SetCurrentDirectory(pathToContentRoot);

CreateWebHostBuilder(args)
    .Build()
    .RunAsService();

Uložení souborů služby ve vhodném umístění na disku

Při použití příkazu zadejte absolutní SetBasePath cestu ke IConfigurationBuilder složce, která obsahuje soubory.

Řešení potíží

Informace o řešení potíží Windows Service najdete v tématu řešení potíží a ladění ASP.NET Corech projektů .

Běžné chyby

  • Používá se stará nebo předběžná verze PowerShellu.
  • Zaregistrovaná služba nevyu používá publikovaný výstup aplikace z dotnet publish. Výstup příkazu dotnet build se pro nasazení aplikace nepodporuje. Publikované prostředky se nacházejí v jedné z následujících složek v závislosti na typu nasazení:
    • bin/Release/{TARGET FRAMEWORK}/publish (FDD)
    • bin/Release/{TARGET FRAMEWORK}/{RUNTIME IDENTIFIER}/publish (SCD)
  • Služba není ve stavu SPUŠTĚNO.
  • Cesty k prostředkům, které aplikace používá (například certifikáty), jsou nesprávné. Základní cesta služby Windows je c: \ Windows \ System32.
  • Uživatel nemá práva Přihlásit se jako služba.
  • Při spuštění příkazu PowerShellu vypršela platnost hesla uživatele nebo se mu New-Service nesprávně předá.
  • Aplikace vyžaduje ASP.NET Core, ale není nakonfigurovaná pro zabezpečená připojení (HTTPS).
  • Port adresy URL požadavku je v aplikaci nesprávný nebo není správně nakonfigurovaný.

Protokoly událostí systému a aplikací

Přístup k protokolům systémových a aplikačních událostí:

  1. Otevřete nabídka Start, vyhledejte Prohlížeč událostí a vyberte aplikaci Prohlížeč událostí.
  2. V Prohlížeč událostí otevřete uzel Windows Protokoly.
  3. Výběrem možnosti Systém otevřete protokol systémových událostí. Výběrem možnosti Aplikace otevřete protokol událostí aplikace.
  4. Vyhledejte chyby související s aplikací, která selhává.

Spuštění aplikace na příkazovém řádku

Mnoho chyb při spuštění nevytváří v protokolech událostí užitečné informace. Příčinu některých chyb můžete zjistit spuštěním aplikace na příkazovém řádku hostitelského systému. Pokud chcete z aplikace protokolovat další podrobnosti, snižte úroveň protokolu nebo spusťte aplikaci ve vývojovém prostředí.

Vymazání mezipamětí balíčků

Funkční aplikace může selhat ihned po upgradu .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v rámci aplikace. V některých případech balíčky, které jsou v souladu s balíčky, mohou při provádění významných upgradů přerušit aplikaci. Většinu těchto problémů můžete vyřešit pomocí těchto pokynů:

  1. Odstraňte složky bin a obj.

  2. Vymažte mezipaměti balíčků spuštěním příkazu dotnet nuget locals all --clear z příkazového prostředí.

    Vymazání mezipamětí balíčků lze provést také pomocí nástrojenuget.exe a spuštěním příkazu nuget locals all -clear . nuget.exe není sada odinstalována s operačním systémem Windows desktop a je nutné ji získat odděleně od webu NuGet.

  3. Obnovte a znovu sestavte projekt.

  4. Před opětovným nasazením aplikace odstraňte všechny soubory ve složce pro nasazení na serveru.

Pomalá nebo nereagující aplikace

Výpis stavu systému je snímek paměti systému a může vám pomůže určit příčinu selhání aplikace, selhání při spuštění nebo pomalé aplikace.

Aplikace selže nebo dojde k výjimce.

získat a analyzovat výpis z Zasílání zpráv o chybách systému Windows (WER):

  1. Vytvořte složku uchovávající soubory s výpisem stavu systému c:\dumps .

  2. Spusťte skript PowerShellu EnableDumps s názvem spustitelného souboru aplikace:

    .\EnableDumps {APPLICATION EXE} c:\dumps
    
  3. Spusťte aplikaci za podmínek, které způsobí, že dojde k chybě.

  4. Po chybě spusťte skript PowerShellu DisableDumps:

    .\DisableDumps {APPLICATION EXE}
    

Po selhání aplikace a dokončení shromažďování výpisu je možné aplikaci ukončit normálně. Skript PowerShellu nakonfiguruje WER a shromáždí až pět výpisů paměti pro každou aplikaci.

Upozornění

Výpisy stavu systému můžou zabírat velké množství místa na disku (každý až několik gigabajtů).

Aplikace nereaguje, při spuštění se nezdařila nebo se spouští normálně.

Když aplikace přestane reagovat (zastaví se, ale nejedná se o chybu), selže během spuštění nebo se spustí normálně, podívejte se na soubory výpisu paměti v uživatelském režimu: zvolením nejlepšího nástroje vyberte vhodný nástroj pro vytváření výpisu.

Analýza výpisu paměti

Výpis paměti lze analyzovat pomocí několika přístupů. Další informace najdete v tématu Analýza souboru s výpisem User-Mode.

Další zdroje informací