Hostování ASP.NET Core ve službě Windows
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete v tomto článku ve verzi .NET 9.
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:
- Vytvořte aplikaci Worker Service ze šablony .NET Core.
- Nainstalujte balíček NuGet Microsoft.Extensions.Hosting.WindowsServices.
- Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
- Vytvoření nového projektu
- Vyberte Službu pracovního procesu. Vyberte Další.
- Do pole Název projektu zadejte název projektu nebo přijměte výchozí název projektu. Vyberte Vytvořit.
- 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
WindowsServiceLifetime
hodnotu . - 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 vappsettings.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) označovaný jako 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>win-x64</RuntimeIdentifier>
Publikování pro více identifikátorů RID:
- Zadejte identifikátory RID v seznamu oddělených středníkem.
- Použijte název <vlastnosti RuntimeIdentifiers> (množné číslo).
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:
- Spuštěním příkazu secpol.msc otevřete editor místních zásad zabezpečení.
- Rozbalte uzel Místní zásady a vyberte Přiřazení uživatelských práv.
- Otevřete zásadu přihlášení jako služby .
- Vyberte Přidat uživatele nebo skupinu.
- Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
- Do pole pro název objektu zadejte uživatelský účet (
{DOMAIN OR COMPUTER NAME\USER}
) a výběrem ok přidejte uživatele do zásady. - 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.
- Do pole pro název objektu zadejte uživatelský účet (
- 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říkladd:\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říkladContoso\ServiceUser
).{SERVICE NAME}
: Název služby (napříkladMyService
).{EXE FILE PATH}
: Úplná spustitelná cesta aplikace (napříkladd:\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říkladd:\myservice
).{DESCRIPTION}
: Popis služby (napříkladMy sample service
).{DISPLAY NAME}
: Zobrazovaný název služby (napříkladMy 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:
- Konfigurace koncových bodů pro webový server ASP.NET Core Kestrel
- Implementace webového serveru HTTP.sys v ASP.NET Core
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.
Odstraňová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í:
- Otevřete nabídka Start, vyhledejte Prohlížeč událostí a vyberte aplikaci Prohlížeč událostí.
- V Prohlížeč událostí otevřete uzel Protokoly systému Windows.
- 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.
- 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ů:
Odstraňte přihrádku a složky obj.
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í součástí instalace s desktopovým operačním systémem Windows a musí být získána odděleně od webu NuGet.Obnovte a znovu sestavte projekt.
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):
Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese
c:\dumps
.Spusťte skript PowerShellu EnableDumps s názvem spustitelného souboru aplikace:
.\EnableDumps {APPLICATION EXE} c:\dumps
Spusťte aplikaci za podmínek, které způsobují chybové ukončení.
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, ale nespustí se při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje k výběru 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ší materiály
- Zobrazení nebo stažení ukázkového kódu (postup stažení)
- Kestrel Konfigurace koncového bodu (zahrnuje konfiguraci HTTPS a podporu SNI)
- Obecný hostitel .NET v ASP.NET Core
- Řešení potíží s projekty ASP.NET Core a jejich ladění
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:
- Vytvořte aplikaci Worker Service ze šablony .NET Core.
- Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
- Vytvoření nového projektu
- Vyberte Službu pracovního procesu. Vyberte Další.
- Do pole Název projektu zadejte název projektu nebo přijměte výchozí název projektu. Vyberte Vytvořit.
- 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
WindowsServiceLifetime
hodnotu . - 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 vappsettings.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) označovaný jako 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:
- Zadejte identifikátory RID v seznamu oddělených středníkem.
- Použijte název <vlastnosti RuntimeIdentifiers> (množné číslo).
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:
- Spuštěním příkazu secpol.msc otevřete editor místních zásad zabezpečení.
- Rozbalte uzel Místní zásady a vyberte Přiřazení uživatelských práv.
- Otevřete zásadu přihlášení jako služby .
- Vyberte Přidat uživatele nebo skupinu.
- Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
- Do pole pro název objektu zadejte uživatelský účet (
{DOMAIN OR COMPUTER NAME\USER}
) a výběrem ok přidejte uživatele do zásady. - 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.
- Do pole pro název objektu zadejte uživatelský účet (
- 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říkladd:\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říkladContoso\ServiceUser
).{SERVICE NAME}
: Název služby (napříkladMyService
).{EXE FILE PATH}
: Úplná spustitelná cesta aplikace (napříkladd:\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říkladd:\myservice
).{DESCRIPTION}
: Popis služby (napříkladMy sample service
).{DISPLAY NAME}
: Zobrazovaný název služby (napříkladMy 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:
- Konfigurace koncových bodů pro webový server ASP.NET Core Kestrel
- Implementace webového serveru HTTP.sys v ASP.NET Core
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.
Odstraňová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í:
- Otevřete nabídka Start, vyhledejte Prohlížeč událostí a vyberte aplikaci Prohlížeč událostí.
- V Prohlížeč událostí otevřete uzel Protokoly systému Windows.
- 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.
- 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ů:
Odstraňte přihrádku a složky obj.
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í součástí instalace s desktopovým operačním systémem Windows a musí být získána odděleně od webu NuGet.Obnovte a znovu sestavte projekt.
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):
Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese
c:\dumps
.Spusťte skript PowerShellu EnableDumps s názvem spustitelného souboru aplikace:
.\EnableDumps {APPLICATION EXE} c:\dumps
Spusťte aplikaci za podmínek, které způsobují chybové ukončení.
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, ale nespustí se při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje k výběru 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ší materiály
- Kestrel Konfigurace koncového bodu (zahrnuje konfiguraci HTTPS a podporu SNI)
- Obecný hostitel .NET v ASP.NET Core
- Řešení potíží s projekty ASP.NET Core a jejich ladění
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:
- Vytvořte aplikaci Worker Service ze šablony .NET Core.
- Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
- Vytvoření nového projektu
- Vyberte Službu pracovního procesu. Vyberte Další.
- Do pole Název projektu zadejte název projektu nebo přijměte výchozí název projektu. Vyberte Vytvořit.
- 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
WindowsServiceLifetime
hodnotu . - 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 vappsettings.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) označovaný jako 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:
- Zadejte identifikátory RID v seznamu oddělených středníkem.
- Použijte název <vlastnosti RuntimeIdentifiers> (množné číslo).
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:
- Spuštěním příkazu secpol.msc otevřete editor místních zásad zabezpečení.
- Rozbalte uzel Místní zásady a vyberte Přiřazení uživatelských práv.
- Otevřete zásadu přihlášení jako služby .
- Vyberte Přidat uživatele nebo skupinu.
- Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
- Do pole pro název objektu zadejte uživatelský účet (
{DOMAIN OR COMPUTER NAME\USER}
) a výběrem ok přidejte uživatele do zásady. - 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.
- Do pole pro název objektu zadejte uživatelský účet (
- 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říkladd:\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říkladContoso\ServiceUser
).{SERVICE NAME}
: Název služby (napříkladMyService
).{EXE FILE PATH}
: Úplná spustitelná cesta aplikace (napříkladd:\myservice\myservice.exe
). Zadejte název souboru spustitelného souboru s příponou.{DESCRIPTION}
: Popis služby (napříkladMy sample service
).{DISPLAY NAME}
: Zobrazovaný název služby (napříkladMy 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:
- Konfigurace koncových bodů pro webový server ASP.NET Core Kestrel
- Implementace webového serveru HTTP.sys v ASP.NET Core
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.
Odstraňová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í:
- Otevřete nabídka Start, vyhledejte Prohlížeč událostí a vyberte aplikaci Prohlížeč událostí.
- V Prohlížeč událostí otevřete uzel Protokoly systému Windows.
- 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.
- 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ů:
Odstraňte přihrádku a složky obj.
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í součástí instalace s desktopovým operačním systémem Windows a musí být získána odděleně od webu NuGet.Obnovte a znovu sestavte projekt.
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):
Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese
c:\dumps
.Spusťte skript PowerShellu EnableDumps s názvem spustitelného souboru aplikace:
.\EnableDumps {APPLICATION EXE} c:\dumps
Spusťte aplikaci za podmínek, které způsobují chybové ukončení.
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, ale nespustí se při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje k výběru 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ší materiály
- Kestrel Konfigurace koncového bodu (zahrnuje konfiguraci HTTPS a podporu SNI)
- Obecný hostitel .NET v ASP.NET Core
- Řešení potíží s projekty ASP.NET Core a jejich ladění
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:
- Vytvořte aplikaci Worker Service ze šablony .NET Core.
- Postupujte podle pokynů v části Konfigurace aplikace a aktualizujte aplikaci Pracovní služba tak, aby běžela jako služba Windows.
- Vytvoření nového projektu
- Vyberte Službu pracovního procesu. Vyberte Další.
- Do pole Název projektu zadejte název projektu nebo přijměte výchozí název projektu. Vyberte Vytvořit.
- 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
WindowsServiceLifetime
hodnotu . - 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 vappsettings.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) označovaný jako 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:
- Zadejte identifikátory RID v seznamu oddělených středníkem.
- Použijte název <vlastnosti RuntimeIdentifiers> (množné číslo).
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:
- Spuštěním příkazu secpol.msc otevřete editor místních zásad zabezpečení.
- Rozbalte uzel Místní zásady a vyberte Přiřazení uživatelských práv.
- Otevřete zásadu přihlášení jako služby .
- Vyberte Přidat uživatele nebo skupinu.
- Zadejte název objektu (uživatelský účet) pomocí některého z následujících přístupů:
- Do pole pro název objektu zadejte uživatelský účet (
{DOMAIN OR COMPUTER NAME\USER}
) a výběrem ok přidejte uživatele do zásady. - 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.
- Do pole pro název objektu zadejte uživatelský účet (
- 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říkladd:\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říkladContoso\ServiceUser
).{SERVICE NAME}
: Název služby (napříkladMyService
).{EXE FILE PATH}
: Úplná spustitelná cesta aplikace (napříkladd:\myservice\myservice.exe
). Zadejte název souboru spustitelného souboru s příponou.{DESCRIPTION}
: Popis služby (napříkladMy sample service
).{DISPLAY NAME}
: Zobrazovaný název služby (napříkladMy 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.
Odstraňová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í:
- Otevřete nabídka Start, vyhledejte Prohlížeč událostí a vyberte aplikaci Prohlížeč událostí.
- V Prohlížeč událostí otevřete uzel Protokoly systému Windows.
- 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.
- 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ů:
Odstraňte přihrádku a složky obj.
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í součástí instalace s desktopovým operačním systémem Windows a musí být získána odděleně od webu NuGet.Obnovte a znovu sestavte projekt.
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):
Vytvořte složku pro ukládání souborů s výpisem stavu systému na adrese
c:\dumps
.Spusťte skript PowerShellu EnableDumps s názvem spustitelného souboru aplikace:
.\EnableDumps {APPLICATION EXE} c:\dumps
Spusťte aplikaci za podmínek, které způsobují chybové ukončení.
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, ale nespustí se při spuštění nebo se spustí normálně, přečtěte si téma Soubory výpisu stavu systému v uživatelském režimu: Volba nejvhodnějšího nástroje k výběru 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ší materiály
- Kestrel Konfigurace koncového bodu (zahrnuje konfiguraci HTTPS a podporu SNI)
- Obecný hostitel .NET v ASP.NET Core
- Řešení potíží s projekty ASP.NET Core a jejich ladění