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

Aplikaci ASP.NET Core je možné hostovat ve Windows jako službu systému Windows bez použití služby IIS. Když je aplikace hostovaná jako služba Windows, spustí se automaticky po restartování serveru.

Požadavky

Šablona služby pracovního procesu

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

  1. Vytvořte aplikaci Worker Service ze šablony .NET Core.
  2. Nainstalujte balíček NuGet Microsoft.Extensions.Hosting.WindowsServices.
  3. Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
  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ě Vytvořit novou službu pracovního procesu vyberte Vytvořit.

Konfigurace aplikace

Aktualizujte program.cs tak, aby volal AddWindowsService. Když je aplikace spuštěná jako služba systému Windows, AddWindowsService:

  • Nastaví životnost hostitele na WindowsServiceLifetimehodnotu .
  • Nastaví kořen obsahu na AppContext.BaseDirectory. Další informace najdete v části Aktuální adresář a kořenový adresář obsahu.
  • Povolí protokolování do protokolu událostí:
    • Název aplikace se používá 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á CreateDefaultBuilder sestavení hostitele.
    • Přepište výchozí úroveň Logging:EventLog:LogLevel:Default protokolu klíčem v appsettings.json/appsettings.{Environment}.json jiném poskytovateli konfigurace.
    • Nové zdroje událostí můžou vytvářet jenom správci. Pokud zdroj událostí nelze vytvořit pomocí názvu aplikace, zaprotokoluje se upozornění do zdroje aplikace a protokoly událostí jsou zakázané.

Vezměte v úvahu následující ServiceA třídu:

namespace SampleApp.Services;

public class ServiceA : BackgroundService
{
    public ServiceA(ILoggerFactory loggerFactory)
    {
        Logger = loggerFactory.CreateLogger<ServiceA>();
    }

    public ILogger Logger { get; }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        Logger.LogInformation("ServiceA is starting.");

        stoppingToken.Register(() => Logger.LogInformation("ServiceA is stopping."));

        while (!stoppingToken.IsCancellationRequested)
        {
            Logger.LogInformation("ServiceA is doing background work.");

            await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
        }

        Logger.LogInformation("ServiceA has stopped.");
    }
}

Následující Program.cs volání AddHostedService pro registraci ServiceA:

using SampleApp.Services;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddWindowsService();
builder.Services.AddHostedService<ServiceA>();

var app = builder.Build();

app.MapRazorPages();

app.Run();

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

  • Ukázka služby Background Worker: Ukázka jiné než webové aplikace založená na šabloně Pracovní služba, která používá hostované služby pro úlohy na pozadí.
  • Ukázka služby Web App Service: Razor Ukázka webové aplikace Stránky, která běží jako služba Windows s hostovanými službami pro úlohy na pozadí.

Pokyny k MVC najdete v článcích Přehled ASP.NET Core MVC a Migrace z ASP.NET Core 2.2 na verzi 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á Razor architektury Pages nebo MVC, zadejte do souboru projektu webovou sadu SDK:

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

Pokud služba provádí pouze úlohy na pozadí (například hostované služby), zadejte v 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é systémové verze .NET Core v cílovém systému. Při přijetí scénáře FDD 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, soubor web.config, který se obvykle vytváří při publikování aplikace ASP.NET Core, není pro aplikaci služby Windows zbytečné. Chcete-li zakázat vytvoření souboru web.config , přidejte vlastnost nastavenou <IsTransformWebConfigDisabled> na true.

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

Samostatné nasazení (SCD)

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

Identifikátor modulu Windows Runtime (RID) je součástí objektu <PropertyGroup> , který obsahuje cílovou architekturu:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

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

Další informace najdete v tématu Katalog identifikátorů RID .NET Core.

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 operačním systému Windows 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.

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

Další informace naleznete v tématu Microsoft.PowerShell.LocalAccounts a účty uživatelů 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ásit se jako práva služby

Vytvoření práva k přihlášení jako služby pro uživatelský účet služby:

  1. Spuštěním příkazu 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ášení jako služby .
  4. Vyberte Přidat uživatele nebo skupinu.
  5. Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
    1. Do pole pro název objektu zadejte uživatelský účet ({DOMAIN OR COMPUTER NAME\USER}) a výběrem okpřidejte uživatele do zásady.
    2. Vyberte Upřesnit. Vyberte Najít. V seznamu vyberte uživatelský účet. Vyberte OK. Znovu vyberte OK a přidejte uživatele do zásad.
  6. Chcete-li přijmout změny, vyberte OK nebo Použít .

Vytvoření a správa služby systému Windows

Vytvoření služby

K registraci služby použijte příkazy PowerShellu. Z příkazového 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} --contentRoot {EXE FOLDER PATH}" -Credential "{DOMAIN OR COMPUTER NAME\USER}" -Description "{DESCRIPTION}" -DisplayName "{DISPLAY NAME}" -StartupType Automatic
  • {EXE PATH}: Cesta spustitelného souboru aplikace na hostiteli (například d:\myservice). Do cesty nezahrnujte název spustitelného souboru aplikace. Koncové lomítko není povinné.
  • {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}: Úplná spustitelná cesta aplikace (například d:\myservice\myservice.exe). Zadejte název souboru spustitelného souboru s příponou.
  • {EXE FOLDER PATH}: Úplná cesta ke složce spustitelného souboru aplikace (například d:\myservice).
  • {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 trvá několik sekund.

Určení stavu služby

Pokud chcete zkontrolovat stav 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

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

Stop-Service -Name {SERVICE NAME}

Odebrání služby

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

Remove-Service -Name {SERVICE NAME}

Scénáře týkající se 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ástrojem pro vyrovnávání zatížení, můžou vyžadovat další konfiguraci. Další informace najdete 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 k konfiguraci adres URL a portů najdete v příslušném článku o serveru:

Předchozí doprovodné materiály se týkají podpory koncových bodů HTTPS. Například nakonfigurujte aplikaci pro HTTPS při použití ověřování se službou Windows.

Poznámka

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

Aktuální adresář a kořen obsahu

Aktuální pracovní adresář vrácený voláním GetCurrentDirectory služby systému 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í). K ú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

Použijte IHostEnvironment.ContentRootPath nebo ContentRootFileProvider vyhledejte prostředky aplikace.

Když aplikace běží jako služba, UseWindowsService nastaví ji na AppContext.BaseDirectoryContentRootPath.

Výchozí soubory appsettings.json nastavení aplikace a appsettings.{Environment}.json, jsou načteny z kořenového adresáře obsahu aplikace voláním CreateDefaultBuilder během sestavování hostitele.

U jiných souborů nastavení načtených kódem ConfigureAppConfigurationvývojáře není nutné volat SetBasePath. V následujícím příkladu custom_settings.json soubor existuje v kořenovém adresáři obsahu aplikace a je načten 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 získat GetCurrentDirectory cestu k prostředku, protože aplikace služby systému Windows vrátí složku C:\WINDOWS\system32 jako její aktuální adresář.

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

Zadejte absolutní cestu SetBasePath při použití IConfigurationBuilder složky obsahující soubory.

Odstranění potíží

Pokud chcete řešit potíže s aplikací služby pro Windows, přečtěte si téma Řešení potíží a ladění ASP.NET základních projektů.

Běžné chyby

  • Používá se stará nebo předběžná verze PowerShellu.
  • Registrovaná služba nepoužívá publikovaný výstup aplikace z příkazu dotnet publish. Výstup příkazu dotnet build není pro nasazení aplikace podporovaný. Publikované prostředky se nacházejí v některé 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 systému Windows je c:\Windows\System32.
  • Uživatel nemá oprávnění k přihlášení jako služba .
  • Platnost hesla uživatele vypršela nebo je při spuštění New-Service příkazu PowerShellu nesprávně předána.
  • Aplikace vyžaduje ověřování 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 událostí systému a aplikací:

  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 Protokoly systému Windows.
  3. Výběrem možnosti Systém otevřete protokol událostí systému. Výběrem možnosti Aplikace otevřete protokol událostí aplikace.
  4. Vyhledejte chyby spojené s neúspěšnou aplikací.

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

Mnoho chyb při spuštění negeneruje užitečné informace v protokolech událostí. Příčinu některých chyb můžete zjistit spuštěním aplikace na příkazovém řádku v hostitelském systému. Pokud chcete protokolovat další podrobnosti z aplikace, 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 sady .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v aplikaci. V některých případech můžou inkoherentní balíčky přerušit aplikaci při provádění hlavních upgradů. Většinu těchto problémů je možné vyřešit pomocí těchto pokynů:

  1. Odstraňte přihrádku a složky obj.

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

    Vymazání mezipaměti balíčků lze také provést pomocí nástroje nuget.exe a spuštění příkazu nuget locals all -clear. nuget.exe není sbalené instalace s desktopovým operačním systémem Windows a musí být získána 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 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 chybového ukončení aplikace, selhání spuštění nebo pomalé aplikace.

Aplikace se chybově ukončí nebo dojde k výjimce

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

  1. Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese 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ůsobují chybové ukončení.

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

    .\DisableDumps {APPLICATION EXE}
    

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

Upozorňující

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

Aplikace nereaguje, během spouštění selže nebo běží normálně

Když aplikace přestane reagovat (přestane reagovat, ale neuspěje), selže při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje pro výběr vhodného nástroje pro vytvoření výpisu paměti.

Analýza výpisu paměti

Výpis paměti je možné analyzovat pomocí několika přístupů. Další informace naleznete v tématu Analýza souboru výpisu stavu systému v uživatelském režimu.

Další prostředky

Aplikaci ASP.NET Core je možné hostovat ve Windows jako službu systému Windows bez použití služby IIS. Když je aplikace hostovaná jako služba Windows, spustí se automaticky po restartování serveru.

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

Požadavky

Šablona služby pracovního procesu

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

  1. Vytvořte aplikaci Worker Service ze šablony .NET Core.
  2. Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
  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ě Vytvořit novou službu pracovního procesu vyberte Vytvořit.

Konfigurace aplikace

Aplikace vyžaduje referenční informace k balíčku pro Microsoft.Extensions.Hosting.WindowsServices.

IHostBuilder.UseWindowsService je volána při sestavování hostitele. Pokud je aplikace spuštěná jako služba systému Windows, metoda:

  • Nastaví životnost hostitele na WindowsServiceLifetimehodnotu .
  • Nastaví kořen obsahu na AppContext.BaseDirectory. Další informace najdete v části Aktuální adresář a kořenový adresář obsahu.
  • Povolí protokolování do protokolu událostí:
    • Název aplikace se používá 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á CreateDefaultBuilder sestavení hostitele.
    • Přepište výchozí úroveň Logging:EventLog:LogLevel:Default protokolu klíčem v appsettings.json/appsettings.{Environment}.json jiném poskytovateli konfigurace.
    • Nové zdroje událostí můžou vytvářet jenom správci. Pokud zdroj událostí nelze vytvořit pomocí názvu aplikace, zaprotokoluje se upozornění do zdroje aplikace a protokoly událostí jsou zakázané.

V Program.cs:

  • Nastavit ContentRootPath
  • Volejte UseWindowsService
using Microsoft.Extensions.Hosting.WindowsServices;
using SampleApp.Services;

var options = new WebApplicationOptions
{
    Args = args,
    ContentRootPath = WindowsServiceHelpers.IsWindowsService() 
                                     ? AppContext.BaseDirectory : default
};

var builder = WebApplication.CreateBuilder(options);
builder.Services.AddRazorPages();
builder.Services.AddHostedService<ServiceA>();
builder.Services.AddHostedService<ServiceB>();

builder.Host.UseWindowsService();

var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
await app.RunAsync();

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

  • Ukázka služby Background Worker: Ukázka jiné než webové aplikace založená na šabloně Pracovní služba, která používá hostované služby pro úlohy na pozadí.
  • Ukázka služby Web App Service: Razor Ukázka webové aplikace Stránky, která běží jako služba Windows s hostovanými službami pro úlohy na pozadí.

Pokyny k MVC najdete v článcích Přehled ASP.NET Core MVC a Migrace z ASP.NET Core 2.2 na verzi 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á Razor architektury Pages nebo MVC, zadejte do souboru projektu webovou sadu SDK:

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

Pokud služba provádí pouze úlohy na pozadí (například hostované služby), zadejte v 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é systémové verze .NET Core v cílovém systému. Při přijetí scénáře FDD 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, soubor web.config, který se obvykle vytváří při publikování aplikace ASP.NET Core, není pro aplikaci služby Windows zbytečné. Chcete-li zakázat vytvoření souboru web.config , přidejte vlastnost nastavenou <IsTransformWebConfigDisabled> na true.

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

Samostatné nasazení (SCD)

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

Identifikátor modulu Windows Runtime (RID) je součástí objektu <PropertyGroup> , který obsahuje cílovou architekturu:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

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

Další informace najdete v tématu Katalog identifikátorů RID .NET Core.

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 operačním systému Windows 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.

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

Další informace naleznete v tématu Microsoft.PowerShell.LocalAccounts a účty uživatelů 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ásit se jako práva služby

Vytvoření práva k přihlášení jako služby pro uživatelský účet služby:

  1. Spuštěním příkazu 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ášení jako služby .
  4. Vyberte Přidat uživatele nebo skupinu.
  5. Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
    1. Do pole pro název objektu zadejte uživatelský účet ({DOMAIN OR COMPUTER NAME\USER}) a výběrem okpřidejte uživatele do zásady.
    2. Vyberte Upřesnit. Vyberte Najít. V seznamu vyberte uživatelský účet. Vyberte OK. Znovu vyberte OK a přidejte uživatele do zásad.
  6. Chcete-li přijmout změny, vyberte OK nebo Použít .

Vytvoření a správa služby systému Windows

Vytvoření služby

K registraci služby použijte příkazy PowerShellu. Z příkazového 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} --contentRoot {EXE FOLDER PATH}" -Credential "{DOMAIN OR COMPUTER NAME\USER}" -Description "{DESCRIPTION}" -DisplayName "{DISPLAY NAME}" -StartupType Automatic
  • {EXE PATH}: Cesta spustitelného souboru aplikace na hostiteli (například d:\myservice). Do cesty nezahrnujte název spustitelného souboru aplikace. Koncové lomítko není povinné.
  • {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}: Úplná spustitelná cesta aplikace (například d:\myservice\myservice.exe). Zadejte název souboru spustitelného souboru s příponou.
  • {EXE FOLDER PATH}: Úplná cesta ke složce spustitelného souboru aplikace (například d:\myservice).
  • {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 trvá několik sekund.

Určení stavu služby

Pokud chcete zkontrolovat stav 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

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

Stop-Service -Name {SERVICE NAME}

Odebrání služby

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

Remove-Service -Name {SERVICE NAME}

Scénáře týkající se 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ástrojem pro vyrovnávání zatížení, můžou vyžadovat další konfiguraci. Další informace najdete 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 k konfiguraci adres URL a portů najdete v příslušném článku o serveru:

Předchozí doprovodné materiály se týkají podpory koncových bodů HTTPS. Například nakonfigurujte aplikaci pro HTTPS při použití ověřování se službou Windows.

Poznámka

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

Aktuální adresář a kořen obsahu

Aktuální pracovní adresář vrácený voláním GetCurrentDirectory služby systému 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í). K ú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

Použijte IHostEnvironment.ContentRootPath nebo ContentRootFileProvider vyhledejte prostředky aplikace.

Když aplikace běží jako služba, UseWindowsService nastaví ji na AppContext.BaseDirectoryContentRootPath.

Výchozí soubory appsettings.json nastavení aplikace a appsettings.{Environment}.json, jsou načteny z kořenového adresáře obsahu aplikace voláním CreateDefaultBuilder během sestavování hostitele.

U jiných souborů nastavení načtených kódem ConfigureAppConfigurationvývojáře není nutné volat SetBasePath. V následujícím příkladu custom_settings.json soubor existuje v kořenovém adresáři obsahu aplikace a je načten 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 získat GetCurrentDirectory cestu k prostředku, protože aplikace služby systému Windows vrátí složku C:\WINDOWS\system32 jako její aktuální adresář.

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

Zadejte absolutní cestu SetBasePath při použití IConfigurationBuilder složky obsahující soubory.

Odstranění potíží

Pokud chcete řešit potíže s aplikací služby pro Windows, přečtěte si téma Řešení potíží a ladění ASP.NET základních projektů.

Běžné chyby

  • Používá se stará nebo předběžná verze PowerShellu.
  • Registrovaná služba nepoužívá publikovaný výstup aplikace z příkazu dotnet publish. Výstup příkazu dotnet build není pro nasazení aplikace podporovaný. Publikované prostředky se nacházejí v některé 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 systému Windows je c:\Windows\System32.
  • Uživatel nemá oprávnění k přihlášení jako služba .
  • Platnost hesla uživatele vypršela nebo je při spuštění New-Service příkazu PowerShellu nesprávně předána.
  • Aplikace vyžaduje ověřování 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 událostí systému a aplikací:

  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 Protokoly systému Windows.
  3. Výběrem možnosti Systém otevřete protokol událostí systému. Výběrem možnosti Aplikace otevřete protokol událostí aplikace.
  4. Vyhledejte chyby spojené s neúspěšnou aplikací.

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

Mnoho chyb při spuštění negeneruje užitečné informace v protokolech událostí. Příčinu některých chyb můžete zjistit spuštěním aplikace na příkazovém řádku v hostitelském systému. Pokud chcete protokolovat další podrobnosti z aplikace, 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 sady .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v aplikaci. V některých případech můžou inkoherentní balíčky přerušit aplikaci při provádění hlavních upgradů. Většinu těchto problémů je možné vyřešit pomocí těchto pokynů:

  1. Odstraňte přihrádku a složky obj.

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

    Vymazání mezipaměti balíčků lze také provést pomocí nástroje nuget.exe a spuštění příkazu nuget locals all -clear. nuget.exe není sbalené instalace s desktopovým operačním systémem Windows a musí být získána 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 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 chybového ukončení aplikace, selhání spuštění nebo pomalé aplikace.

Aplikace se chybově ukončí nebo dojde k výjimce

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

  1. Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese 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ůsobují chybové ukončení.

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

    .\DisableDumps {APPLICATION EXE}
    

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

Upozorňující

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

Aplikace nereaguje, během spouštění selže nebo běží normálně

Když aplikace přestane reagovat (přestane reagovat, ale neuspěje), selže při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje pro výběr vhodného nástroje pro vytvoření výpisu paměti.

Analýza výpisu paměti

Výpis paměti je možné analyzovat pomocí několika přístupů. Další informace naleznete v tématu Analýza souboru výpisu stavu systému v uživatelském režimu.

Další prostředky

Aplikaci ASP.NET Core je možné hostovat ve Windows jako službu systému Windows bez použití služby IIS. Když je aplikace hostovaná jako služba Windows, spustí se automaticky po restartování serveru.

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

Požadavky

Šablona služby pracovního procesu

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

  1. Vytvořte aplikaci Worker Service ze šablony .NET Core.
  2. Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
  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ě Vytvořit novou službu pracovního procesu vyberte Vytvořit.

Konfigurace aplikace

Aplikace vyžaduje referenční informace k balíčku pro Microsoft.Extensions.Hosting.WindowsServices.

IHostBuilder.UseWindowsService je volána při sestavování hostitele. Pokud je aplikace spuštěná jako služba systému Windows, metoda:

  • Nastaví životnost hostitele na WindowsServiceLifetimehodnotu .
  • Nastaví kořen obsahu na AppContext.BaseDirectory. Další informace najdete v části Aktuální adresář a kořenový adresář obsahu.
  • Povolí protokolování do protokolu událostí:
    • Název aplikace se používá 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á CreateDefaultBuilder sestavení hostitele.
    • Přepište výchozí úroveň Logging:EventLog:LogLevel:Default protokolu klíčem v appsettings.json/appsettings.{Environment}.json jiném poskytovateli konfigurace.
    • Nové zdroje událostí můžou vytvářet jenom správci. Pokud zdroj událostí nelze vytvořit pomocí názvu aplikace, zaprotokoluje se upozornění do zdroje aplikace a protokoly událostí jsou zakázané.

In CreateHostBuilder of Program.cs:

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

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

  • Ukázka služby Background Worker: Ukázka jiné než webové aplikace založená na šabloně Pracovní služba, která používá hostované služby pro úlohy na pozadí.
  • Ukázka služby Web App Service: Razor Ukázka webové aplikace Stránky, která běží jako služba Windows s hostovanými službami pro úlohy na pozadí.

Pokyny k MVC najdete v článcích Přehled ASP.NET Core MVC a Migrace z ASP.NET Core 2.2 na verzi 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á Razor architektury Pages nebo MVC, zadejte do souboru projektu webovou sadu SDK:

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

Pokud služba provádí pouze úlohy na pozadí (například hostované služby), zadejte v 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é systémové verze .NET Core v cílovém systému. Při přijetí scénáře FDD 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, soubor web.config, který se obvykle vytváří při publikování aplikace ASP.NET Core, není pro aplikaci služby Windows zbytečné. Chcete-li zakázat vytvoření souboru web.config , přidejte vlastnost nastavenou <IsTransformWebConfigDisabled> 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 na hostitelském systému. Modul runtime a závislosti aplikace se nasadí s aplikací.

Identifikátor modulu Windows Runtime (RID) je součástí objektu <PropertyGroup> , který obsahuje cílovou architekturu:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

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

Další informace najdete v tématu Katalog identifikátorů RID .NET Core.

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 operačním systému Windows 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.

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

Další informace naleznete v tématu Microsoft.PowerShell.LocalAccounts a účty uživatelů 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ásit se jako práva služby

Vytvoření práva k přihlášení jako služby pro uživatelský účet služby:

  1. Spuštěním příkazu 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ášení jako služby .
  4. Vyberte Přidat uživatele nebo skupinu.
  5. Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
    1. Do pole pro název objektu zadejte uživatelský účet ({DOMAIN OR COMPUTER NAME\USER}) a výběrem okpřidejte uživatele do zásady.
    2. Vyberte Upřesnit. Vyberte Najít. V seznamu vyberte uživatelský účet. Vyberte OK. Znovu vyberte OK a přidejte uživatele do zásad.
  6. Chcete-li přijmout změny, vyberte OK nebo Použít .

Vytvoření a správa služby systému Windows

Vytvoření služby

K registraci služby použijte příkazy PowerShellu. Z příkazového 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 spustitelného souboru aplikace na hostiteli (například d:\myservice). Do cesty nezahrnujte název spustitelného souboru aplikace. Koncové lomítko není povinné.
  • {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}: Úplná spustitelná cesta aplikace (například d:\myservice\myservice.exe). Zadejte název souboru 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 trvá několik sekund.

Určení stavu služby

Pokud chcete zkontrolovat stav 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

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

Stop-Service -Name {SERVICE NAME}

Odebrání služby

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

Remove-Service -Name {SERVICE NAME}

Scénáře týkající se 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ástrojem pro vyrovnávání zatížení, můžou vyžadovat další konfiguraci. Další informace najdete 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 k konfiguraci adres URL a portů najdete v příslušném článku o serveru:

Předchozí doprovodné materiály se týkají podpory koncových bodů HTTPS. Například nakonfigurujte aplikaci pro HTTPS při použití ověřování se službou Windows.

Poznámka

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

Aktuální adresář a kořen obsahu

Aktuální pracovní adresář vrácený voláním GetCurrentDirectory služby systému 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í). K ú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

Použijte IHostEnvironment.ContentRootPath nebo ContentRootFileProvider vyhledejte prostředky aplikace.

Když aplikace běží jako služba, UseWindowsService nastaví ji na AppContext.BaseDirectoryContentRootPath.

Výchozí soubory appsettings.json nastavení aplikace a appsettings.{Environment}.json, jsou načteny z kořenového adresáře obsahu aplikace voláním CreateDefaultBuilder během sestavování hostitele.

U jiných souborů nastavení načtených kódem ConfigureAppConfigurationvývojáře není nutné volat SetBasePath. V následujícím příkladu custom_settings.json soubor existuje v kořenovém adresáři obsahu aplikace a je načten 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 získat GetCurrentDirectory cestu k prostředku, protože aplikace služby systému Windows vrátí složku C:\WINDOWS\system32 jako její aktuální adresář.

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

Zadejte absolutní cestu SetBasePath při použití IConfigurationBuilder složky obsahující soubory.

Odstranění potíží

Pokud chcete řešit potíže s aplikací služby pro Windows, přečtěte si téma Řešení potíží a ladění ASP.NET základních projektů.

Běžné chyby

  • Používá se stará nebo předběžná verze PowerShellu.
  • Registrovaná služba nepoužívá publikovaný výstup aplikace z příkazu dotnet publish. Výstup příkazu dotnet build není pro nasazení aplikace podporovaný. Publikované prostředky se nacházejí v některé 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 systému Windows je c:\Windows\System32.
  • Uživatel nemá oprávnění k přihlášení jako služba .
  • Platnost hesla uživatele vypršela nebo je při spuštění New-Service příkazu PowerShellu nesprávně předána.
  • Aplikace vyžaduje ověřování 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 událostí systému a aplikací:

  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 Protokoly systému Windows.
  3. Výběrem možnosti Systém otevřete protokol událostí systému. Výběrem možnosti Aplikace otevřete protokol událostí aplikace.
  4. Vyhledejte chyby spojené s neúspěšnou aplikací.

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

Mnoho chyb při spuštění negeneruje užitečné informace v protokolech událostí. Příčinu některých chyb můžete zjistit spuštěním aplikace na příkazovém řádku v hostitelském systému. Pokud chcete protokolovat další podrobnosti z aplikace, 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 sady .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v aplikaci. V některých případech můžou inkoherentní balíčky přerušit aplikaci při provádění hlavních upgradů. Většinu těchto problémů je možné vyřešit pomocí těchto pokynů:

  1. Odstraňte přihrádku a složky obj.

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

    Vymazání mezipaměti balíčků lze také provést pomocí nástroje nuget.exe a spuštění příkazu nuget locals all -clear. nuget.exe není sbalené instalace s desktopovým operačním systémem Windows a musí být získána 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 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 chybového ukončení aplikace, selhání spuštění nebo pomalé aplikace.

Aplikace se chybově ukončí nebo dojde k výjimce

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

  1. Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese 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ůsobují chybové ukončení.

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

    .\DisableDumps {APPLICATION EXE}
    

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

Upozorňující

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

Aplikace nereaguje, během spouštění selže nebo běží normálně

Když aplikace přestane reagovat (přestane reagovat, ale neuspěje), selže při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje pro výběr vhodného nástroje pro vytvoření výpisu paměti.

Analýza výpisu paměti

Výpis paměti je možné analyzovat pomocí několika přístupů. Další informace naleznete v tématu Analýza souboru výpisu stavu systému v uživatelském režimu.

Další prostředky

Aplikaci ASP.NET Core je možné hostovat ve Windows jako službu systému Windows bez použití služby IIS. Když je aplikace hostovaná jako služba Windows, spustí se automaticky po restartování serveru.

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

Požadavky

Šablona služby pracovního procesu

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

  1. Vytvořte aplikaci Worker Service ze šablony .NET Core.
  2. Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
  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ě Vytvořit novou službu pracovního procesu vyberte Vytvořit.

Konfigurace aplikace

Aplikace vyžaduje referenční informace k balíčku pro Microsoft.Extensions.Hosting.WindowsServices.

IHostBuilder.UseWindowsService je volána při sestavování hostitele. Pokud je aplikace spuštěná jako služba systému Windows, metoda:

  • Nastaví životnost hostitele na WindowsServiceLifetimehodnotu .
  • Nastaví kořen obsahu na AppContext.BaseDirectory. Další informace najdete v části Aktuální adresář a kořenový adresář obsahu.
  • Povolí protokolování do protokolu událostí:
    • Název aplikace se používá 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á CreateDefaultBuilder sestavení hostitele.
    • Přepište výchozí úroveň Logging:EventLog:LogLevel:Default protokolu klíčem v appsettings.json/appsettings.{Environment}.json jiném poskytovateli konfigurace.
    • Nové zdroje událostí můžou vytvářet jenom správci. Pokud zdroj událostí nelze vytvořit pomocí názvu aplikace, zaprotokoluje se upozornění do zdroje aplikace a protokoly událostí jsou zakázané.

In CreateHostBuilder of Program.cs:

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

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

  • Ukázka služby Background Worker: Ukázka jiné než webové aplikace založená na šabloně Pracovní služba, která používá hostované služby pro úlohy na pozadí.
  • Ukázka služby Web App Service: Razor Ukázka webové aplikace Stránky, která běží jako služba Windows s hostovanými službami pro úlohy na pozadí.

Pokyny k MVC najdete v článcích Přehled ASP.NET Core MVC a Migrace z ASP.NET Core 2.2 na verzi 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á Razor architektury Pages nebo MVC, zadejte do souboru projektu webovou sadu SDK:

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

Pokud služba provádí pouze úlohy na pozadí (například hostované služby), zadejte v 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é systémové verze .NET Core v cílovém systému. Při přijetí scénáře FDD 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, soubor web.config, který se obvykle vytváří při publikování aplikace ASP.NET Core, není pro aplikaci služby Windows zbytečné. Chcete-li zakázat vytvoření souboru web.config , přidejte vlastnost nastavenou <IsTransformWebConfigDisabled> 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 na hostitelském systému. Modul runtime a závislosti aplikace se nasadí s aplikací.

Identifikátor modulu Windows Runtime (RID) je součástí objektu <PropertyGroup> , který obsahuje cílovou architekturu:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

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

Další informace najdete v tématu Katalog identifikátorů RID .NET Core.

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 operačním systému Windows 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.

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

Další informace naleznete v tématu Microsoft.PowerShell.LocalAccounts a účty uživatelů 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ásit se jako práva služby

Vytvoření práva k přihlášení jako služby pro uživatelský účet služby:

  1. Spuštěním příkazu 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ášení jako služby .
  4. Vyberte Přidat uživatele nebo skupinu.
  5. Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
    1. Do pole pro název objektu zadejte uživatelský účet ({DOMAIN OR COMPUTER NAME\USER}) a výběrem okpřidejte uživatele do zásady.
    2. Vyberte Upřesnit. Vyberte Najít. V seznamu vyberte uživatelský účet. Vyberte OK. Znovu vyberte OK a přidejte uživatele do zásad.
  6. Chcete-li přijmout změny, vyberte OK nebo Použít .

Vytvoření a správa služby systému Windows

Vytvoření služby

K registraci služby použijte příkazy PowerShellu. Z příkazového 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 spustitelného souboru aplikace na hostiteli (například d:\myservice). Do cesty nezahrnujte název spustitelného souboru aplikace. Koncové lomítko není povinné.
  • {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}: Úplná spustitelná cesta aplikace (například d:\myservice\myservice.exe). Zadejte název souboru 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 trvá několik sekund.

Určení stavu služby

Pokud chcete zkontrolovat stav 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

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

Stop-Service -Name {SERVICE NAME}

Odebrání služby

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

Remove-Service -Name {SERVICE NAME}

Scénáře týkající se 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ástrojem pro vyrovnávání zatížení, můžou vyžadovat další konfiguraci. Další informace najdete 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 k konfiguraci adres URL a portů najdete v příslušném článku o serveru:

Předchozí doprovodné materiály se týkají podpory koncových bodů HTTPS. Například nakonfigurujte aplikaci pro HTTPS při použití ověřování se službou Windows.

Poznámka

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

Aktuální adresář a kořen obsahu

Aktuální pracovní adresář vrácený voláním GetCurrentDirectory služby systému 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í). K ú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

Použijte IHostEnvironment.ContentRootPath nebo ContentRootFileProvider vyhledejte prostředky aplikace.

Když aplikace běží jako služba, UseWindowsService nastaví ji na AppContext.BaseDirectoryContentRootPath.

Výchozí soubory appsettings.json nastavení aplikace a appsettings.{Environment}.json, jsou načteny z kořenového adresáře obsahu aplikace voláním CreateDefaultBuilder během sestavování hostitele.

U jiných souborů nastavení načtených kódem ConfigureAppConfigurationvývojáře není nutné volat SetBasePath. V následujícím příkladu custom_settings.json soubor existuje v kořenovém adresáři obsahu aplikace a je načten 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 získat GetCurrentDirectory cestu k prostředku, protože aplikace služby systému Windows vrátí složku C:\WINDOWS\system32 jako její aktuální adresář.

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

Zadejte absolutní cestu SetBasePath při použití IConfigurationBuilder složky obsahující soubory.

Odstranění potíží

Pokud chcete řešit potíže s aplikací služby pro Windows, přečtěte si téma Řešení potíží a ladění ASP.NET základních projektů.

Běžné chyby

  • Používá se stará nebo předběžná verze PowerShellu.
  • Registrovaná služba nepoužívá publikovaný výstup aplikace z příkazu dotnet publish. Výstup příkazu dotnet build není pro nasazení aplikace podporovaný. Publikované prostředky se nacházejí v některé 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 systému Windows je c:\Windows\System32.
  • Uživatel nemá oprávnění k přihlášení jako služba .
  • Platnost hesla uživatele vypršela nebo je při spuštění New-Service příkazu PowerShellu nesprávně předána.
  • Aplikace vyžaduje ověřování 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 událostí systému a aplikací:

  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 Protokoly systému Windows.
  3. Výběrem možnosti Systém otevřete protokol událostí systému. Výběrem možnosti Aplikace otevřete protokol událostí aplikace.
  4. Vyhledejte chyby spojené s neúspěšnou aplikací.

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

Mnoho chyb při spuštění negeneruje užitečné informace v protokolech událostí. Příčinu některých chyb můžete zjistit spuštěním aplikace na příkazovém řádku v hostitelském systému. Pokud chcete protokolovat další podrobnosti z aplikace, 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 sady .NET Core SDK na vývojovém počítači nebo změně verzí balíčků v aplikaci. V některých případech můžou inkoherentní balíčky přerušit aplikaci při provádění hlavních upgradů. Většinu těchto problémů je možné vyřešit pomocí těchto pokynů:

  1. Odstraňte přihrádku a složky obj.

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

    Vymazání mezipaměti balíčků lze také provést pomocí nástroje nuget.exe a spuštění příkazu nuget locals all -clear. nuget.exe není sbalené instalace s desktopovým operačním systémem Windows a musí být získána 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 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 chybového ukončení aplikace, selhání spuštění nebo pomalé aplikace.

Aplikace se chybově ukončí nebo dojde k výjimce

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

  1. Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese 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ůsobují chybové ukončení.

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

    .\DisableDumps {APPLICATION EXE}
    

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

Upozorňující

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

Aplikace nereaguje, během spouštění selže nebo běží normálně

Když aplikace přestane reagovat (přestane reagovat, ale neuspěje), selže při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje pro výběr vhodného nástroje pro vytvoření výpisu paměti.

Analýza výpisu paměti

Výpis paměti je možné analyzovat pomocí několika přístupů. Další informace naleznete v tématu Analýza souboru výpisu stavu systému v uživatelském režimu.

Další prostředky