Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
A ASP.NET Core-alkalmazások windowsos Windows Service- IIS használata nélkül üzemeltethetők. Windows-szolgáltatásként üzemeltetve az alkalmazás automatikusan elindul a kiszolgáló újraindítása után.
Prerequisites
Munkás szolgáltatás sablon
A ASP.NET Core Worker Service-sablon kiindulópontként szolgál a hosszú ideig futó szolgáltatásalkalmazások írásához. A sablon használata Windows Service-alkalmazás alapjaként:
- Hozzon létre egy feldolgozószolgáltatás-alkalmazást a .NET-sablonból.
- Telepítse a NuGet-csomagot Microsoft.Extensions.Hosting.WindowsServices.
- Az alkalmazáskonfigurációs szakaszban található útmutatást követve frissítse a Worker Service alkalmazást, hogy windowsos szolgáltatásként fusson.
- Hozzon létre egy új projektet.
- Válassza a Munkás szolgáltatáslehetőséget. Válassza a Következőlehetőséget.
- Adjon meg egy projektnevet a Projektnév mezőben, vagy fogadja el az alapértelmezett projektnevet. Válassza a Create gombot.
- Az Új feldolgozói szolgáltatás létrehozása párbeszédpanelen válassza a létrehozása lehetőséget.
Alkalmazáskonfiguráció
Frissítse a Program.cs fájlt úgy, hogy hívja meg a AddWindowsServicefüggvényt. Ha az alkalmazás Windows-szolgáltatásként fut, AddWindowsService:
- A gazdagép élettartamát
WindowsServiceLifetimeértékre állítja. - A
tartalomgyökerét az AppContext.BaseDirectoryértékre állítja be. További információért lásd a Aktuális könyvtár és tartalomgyökér részt. - Engedélyezi a naplózást az eseménynaplóba:
- A rendszer az alkalmazásnevet használja az alapértelmezett forrásnévként.
- Az alapértelmezett naplószint Figyelmeztetési vagy magasabb egy ASP.NET Core-sablonon alapuló alkalmazáshoz, amely meghívja
CreateDefaultBuildera gazdagép létrehozásához. - Felülbírálja az alapértelmezett naplószintet a
Logging:EventLog:LogLevel:Defaultkulccsal aappsettings.json/appsettings.{Environment}.jsonvagy más konfigurációs szolgáltatóban. - Csak a rendszergazdák hozhatnak létre új eseményforrásokat. Ha egy eseményforrás nem hozható létre az alkalmazás nevével, a rendszer figyelmeztetést naplóz a alkalmazás forráshoz, és az eseménynaplók le vannak tiltva.
Vegye figyelembe a következő ServiceA osztályt:
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.");
}
}
Az alábbi Program.cs meghívja AddHostedService, hogy regisztrálja 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();
A témakörhöz a következő mintaalkalmazások kapcsolódnak:
- Háttérmunkaszolgáltatás-minta: A Feldolgozói szolgáltatás sablonon alapuló, alapuló nem webalkalmazás-minta, amely üzemeltetett szolgáltatásokat használ háttérfeladatokhoz.
- Webalkalmazás-szolgáltatás minta: Razor Pages webalkalmazásminta, amely Windows-szolgáltatásként működik, üzemeltetett szolgáltatásokkal, háttérfeladatokhoz.
Az MVC-vel kapcsolatos útmutatásért tekintse meg ASP.NET Core MVC és Migrálás ASP.NET Core 2.2-ről 3.0-racímű cikkeket.
Üzembe helyezés típusa
Az üzembe helyezési forgatókönyvekkel kapcsolatos információkért és tanácsért tekintse meg a .NET-alkalmazások üzembe helyezését ismertető témakört.
SDK
A Razor Pages vagy MVC keretrendszereket használó webalkalmazás-alapú szolgáltatások esetében adja meg a webes SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Web">
Ha a szolgáltatás csak háttérfeladatokat hajt végre (például üzemeltetett szolgáltatások), adja meg a Feldolgozó SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Worker">
Keretrendszerfüggő üzembe helyezés (FDD)
A keretrendszerfüggő üzembe helyezés (FDD) a .NET megosztott rendszerszintű verziójának jelenlétére támaszkodik a célrendszeren. Amikor az FDD-forgatókönyvet, azaz a keretrendszerfüggő végrehajtást, a jelen cikkben ismertetett útmutatást követve fogadják el, az SDK egy végrehajtható fájlt (.exe) hoz létre, amelyet keretrendszerfüggő végrehajthatóként neveznek.
A Web SDKhasználata esetén a Windows Services-alkalmazások esetében szükségtelen egy web.config fájl, amely általában az ASP.NET Core-alkalmazások közzétételekor jön létre. A web.config fájl létrehozásának letiltásához adja hozzá a <IsTransformWebConfigDisabled> tulajdonságot a trueértékre állítva.
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
Önálló üzembe helyezés (SCD)
Az önálló üzembe helyezés (SCD) nem támaszkodik egy megosztott keretrendszer jelenlétére a gazdarendszeren. A futtatókörnyezet és az alkalmazás függőségei az alkalmazással együtt vannak üzembe helyezve.
A , amely tartalmazza a célkeretrendszert, tartalmaz egy Windows <PropertyGroup>.
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
Több RID-hez való közzététel:
- Adja meg az RIDs-t pontosvesszővel elválasztott listában.
- Használja a <RuntimeIdentifiers> (többes szám) tulajdonságnevet.
További információ: .NET RID-katalógus.
Szolgáltatásfelhasználói fiók
Ha felhasználói fiókot szeretne létrehozni egy szolgáltatáshoz, használja a New-LocalUser parancsmagot egy rendszergazdai PowerShell 6-parancshéjból.
Windows 10 2018. októberi frissítés (1809-es verzió/10.0.17763-os build) vagy újabb verzió:
New-LocalUser -Name {SERVICE NAME}
Windows operációs rendszeren a 2018. október 10-i frissítésnél korábbi (1809-es verzió/10.0.17763-os build):
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
Ha a rendszer kéri, adjon meg egy erős jelszót.
Ha a -AccountExpires paramétert nem adja meg a New-LocalUser parancsmagnak lejárati DateTime, a fiók nem jár le.
További információ: Microsoft.PowerShell.LocalAccounts és Szolgáltatás felhasználói fiókok.
Az Active Directory használatakor a felhasználók felügyeletének másik módszere a felügyelt szolgáltatásfiókok használata. További információ: csoport által felügyelt szolgáltatásfiókok áttekintése.
Szolgáltatásként való bejelentkezési jogok
A szolgáltatásként való bejelentkezéshez jogosultságok létrehozása egy szolgáltatásfelhasználói fiókhoz:
- Nyissa meg a Helyi biztonsági házirend szerkesztőt secpol.mscfuttatásával.
- Bontsa ki az Helyi házirendek csomópontot, és válassza meg a Felhasználói jogok hozzárendeléselehetőséget.
- Nyissa meg a Szolgáltatásként bejelentkezés házirendet.
- Válassza az Felhasználó vagy csoport hozzáadásalehetőséget.
- Adja meg az objektum nevét (felhasználói fiókot) az alábbi módszerek valamelyikével:
- Írja be a felhasználói fiókot (
{DOMAIN OR COMPUTER NAME\USER}) az objektumnév mezőbe, és válassza az OK lehetőséget a felhasználó szabályzathoz való hozzáadásához. - Válassza a Speciális lehetőséget. Válassza Keresés Most. Válassza ki a felhasználói fiókot a listából. Kattintson az OK gombra. Válassza OK lehetőséget, ha a felhasználót hozzá szeretné adni a szabályzathoz.
- Írja be a felhasználói fiókot (
- A módosítások elfogadásához válassza OK vagy Alkalmaz lehetőséget.
A Windows szolgáltatás létrehozása és kezelése
Szolgáltatás létrehozása
Szolgáltatás regisztrálása PowerShell-parancsokkal. Egy felügyeleti PowerShell 6-parancshéjból hajtsa végre a következő parancsokat:
$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}: Az alkalmazás futtatható útvonala a gazdagépen (példáuld:\myservice). Ne adja meg az alkalmazás végrehajtható fájlnevét az elérési úton. Nincs szükség záró perjelre. -
{DOMAIN OR COMPUTER NAME\USER}: Szolgáltatásfelhasználói fiók (példáulContoso\ServiceUser). -
{SERVICE NAME}: Szolgáltatásnév (példáulMyService). -
{EXE FILE PATH}: Az alkalmazás teljes végrehajtható elérési útja (példáuld:\myservice\myservice.exe). Adja meg a végrehajtható fájl nevét a kiterjesztéssel. -
{EXE FOLDER PATH}: Az alkalmazás teljes végrehajtható mappa elérési útja (példáuld:\myservice). -
{DESCRIPTION}: Szolgáltatás leírása (példáulMy sample service). -
{DISPLAY NAME}: Szolgáltatásmegjelenítés neve (példáulMy Service).
Szolgáltatás indítása
Szolgáltatás indítása a következő PowerShell 6-paranccsal:
Start-Service -Name {SERVICE NAME}
A parancs néhány másodpercet vesz igénybe a szolgáltatás elindításához.
Szolgáltatás állapotának meghatározása
Egy szolgáltatás állapotának ellenőrzéséhez használja a következő PowerShell 6-parancsot:
Get-Service -Name {SERVICE NAME}
Az állapot a következő értékek egyikeként lesz jelentve:
StartingRunningStoppingStopped
Szolgáltatás leállítása
Szolgáltatás leállítása a következő PowerShell 6 paranccsal:
Stop-Service -Name {SERVICE NAME}
Szolgáltatás eltávolítása
A szolgáltatás leállításának rövid késleltetése után távolítsa el a következő PowerShell 6-parancsot tartalmazó szolgáltatást:
Remove-Service -Name {SERVICE NAME}
Proxykiszolgáló és terheléselosztó forgatókönyvek
Az internetről vagy a vállalati hálózatról érkező kérésekkel kommunikáló, proxy vagy terheléselosztó mögött található szolgáltatások további konfigurációt igényelhetnek. További információ: A ASP.NET Core konfigurálása proxykiszolgálókkal és terheléselosztókkal.
Végpontok konfigurálása
Alapértelmezés szerint az ASP.NET Core a http://localhost:5000értékhez köt. Konfigurálja az URL-címet és a portot a ASPNETCORE_URLS környezeti változó beállításával.
További URL- és portkonfigurációs megközelítésekért tekintse meg a kiszolgáló vonatkozó cikkét:
- Végpontok konfigurálása az ASP.NET Core Kestrel webkiszolgálóhoz
- HTTP.sys webszerver implementálása ASP.NET Core-ban
Az előző útmutató a HTTPS-végpontok támogatását ismerteti. Konfigurálja például az alkalmazást HTTPS-hez, amikor a hitelesítést Windows-szolgáltatással használják.
Note
Az ASP.NET Core HTTPS fejlesztési tanúsítvány használata szolgáltatásvégpont védelmére nem támogatott.
Aktuális könyvtár és tartalomgyökér
A Windows-szolgáltatás GetCurrentDirectory hívásával visszaadott aktuális munkakönyvtár a C:\WINDOWS\system32 mappa. A system32 mappa nem megfelelő hely a szolgáltatás fájljainak tárolására (például beállításfájlok). Az alábbi módszerek egyikével karbantarthatja és elérheti a szolgáltatás eszköz- és beállításfájljait.
A ContentRootPath vagy a ContentRootFileProvider használata
Az alkalmazás erőforrásainak megkereséséhez használja IHostEnvironment.ContentRootPath vagy ContentRootFileProvider.
Amikor az alkalmazás szolgáltatásként fut, a UseWindowsService beállítja a ContentRootPath-et az AppContext.BaseDirectory-ra.
Az alkalmazás alapértelmezett beállításfájljai (appsettings.json és appsettings.{Environment}.json) az alkalmazás tartalomgyökeréből töltődnek be úgy, hogy meghívják CreateDefaultBuildert a gazdagépépítési.
Az ConfigureAppConfigurationfejlesztői kódjával betöltött egyéb beállításfájlok esetében nincs szükség SetBasePathhívására. Az alábbi példában a custom_settings.json fájl az alkalmazás tartalomgyökerében található, és anélkül van betöltve, hogy explicit módon beállítanál egy alap elérési utat:
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>();
});
}
Ne próbálja meg GetCurrentDirectory erőforrás-elérési út beszerzését, mert egy Windows szolgáltatás alkalmazás a C:\WINDOWS\system32 mappát adja vissza aktuális könyvtárként.
A szolgáltatás fájljainak tárolása megfelelő helyen a lemezen
Adjon meg egy abszolút elérési utat SetBasePath a fájlokat tartalmazó mappához IConfigurationBuilder használatakor.
Troubleshoot
A Windows szolgáltatásalkalmazások hibaelhárításához lásd: ASP.NET Core projektek hibaelhárítása és hibakeresése.
Gyakori hibák
- A PowerShell egy régi vagy előzetes verziója van használatban.
- A regisztrált szolgáltatás nem használja az alkalmazás közzétett kimenetét a dotnet publish parancsból. A dotnet build parancs kimenete nem támogatott alkalmazások telepítéséhez. A közzétett eszközök az üzembe helyezés típusától függően az alábbi mappák egyikében találhatók:
- bin/Release/{TARGET FRAMEWORK}/publish (FDD)
- bin/Release/{TARGET FRAMEWORK}/{RUNTIME IDENTIFIER}/publish (SCD)
- A szolgáltatás nem futó állapotban van.
- Az alkalmazás által használt erőforrások elérési útjai (például tanúsítványok) helytelenek. A Windows-szolgáltatások alap elérési útja c:\Windows\System32.
- A felhasználó nem rendelkezik szolgáltatásként való bejelentkezéssel jogosultságokkal.
- A felhasználó jelszava lejárt vagy helytelenül lett átadva a
New-ServicePowerShell-parancs végrehajtásakor. - Az alkalmazáshoz ASP.NET Core-hitelesítés szükséges, de nincs konfigurálva biztonságos kapcsolatokhoz (HTTPS).
- A kérelem URL-portja helytelen vagy nem megfelelően van konfigurálva az alkalmazásban.
Rendszer- és alkalmazásesemény-naplók
Hozzáférés a rendszer- és alkalmazásesemény-naplókhoz:
- Nyissa meg a Start menüt, keresse meg Eseménynapló, és válassza ki az Eseménynapló alkalmazást.
- Az Eseménynaplónézetben nyissa meg a Windows-naplók csomópontot.
- Válassza Rendszer lehetőséget a Rendszeresemény-napló megnyitásához. Válassza Alkalmazás lehetőséget az alkalmazásesemény-napló megnyitásához.
- Keresse meg a hibás alkalmazáshoz társított hibákat.
Az alkalmazás futtatása parancssorban
Számos indítási hiba nem hoz létre hasznos információkat az eseménynaplókban. A hibák okának megtalálásához futtassa az alkalmazást egy parancssorban az üzemeltetési rendszeren. Ha további részleteket szeretne naplózni az alkalmazásból, csökkentse a naplószintet, vagy futtassa az alkalmazást a fejlesztői környezetben.
Csomagcache-k törlése
A működő alkalmazások a .NET SDK fejlesztői gépen való frissítése vagy az alkalmazás csomagverzióinak módosítása után azonnal meghiúsulhatnak. Bizonyos esetekben az inkognitó csomagok megszakíthatják az alkalmazásokat a nagyobb frissítések végrehajtásakor. A legtöbb ilyen probléma az alábbi utasítások követésével javítható:
Törölje a tároló, a és a obj, valamint a mappákat.
Törölje a csomaggyorsítótárakat a parancshéjban a dotnet nuget locals all --clear parancs végrehajtásával.
A csomaggyorsítótárak törlése az nuget.exe eszközzel és a parancs
nuget locals all -clearvégrehajtásával is elvégezhető. nuget.exe nincs csomagban a Windows asztali operációs rendszerrel, és külön kell beszerezni a NuGet webhelyről.Állítsa vissza és építse újra a projektet.
Az alkalmazás ismételt üzembe helyezése előtt törölje a kiszolgáló üzembehelyezési mappájában lévő összes fájlt.
Lassú vagy nem válaszoló alkalmazás
Az memóriamásolat a rendszer memóriájának pillanatképe, amely segít meghatározni az alkalmazás összeomlásának, indítási hibájának, vagy az alkalmazás lassúságának okát.
Az alkalmazás összeomlik vagy kivételt tapasztal
Memóriakép beszerzése és elemzése a Windows hibajelentési (WER) rendszerből :
Hozzon létre egy mappát, amely az összeomlási memóriaképfájlokat tartalmazza a
c:\dumpshelyen.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás futtatható fájljának nevével:
.\EnableDumps {APPLICATION EXE} c:\dumpsFuttassa az alkalmazást az összeomlást okozó feltételek között.
Az összeomlás után futtassa a DisableDumps PowerShell-szkriptet:
.\DisableDumps {APPLICATION EXE}
Az alkalmazás összeomlása és a hibajegy-gyűjtés befejezése után az alkalmazás normál módon leállítható. A PowerShell-szkript úgy konfigurálja a WER-t, hogy alkalmazásonként legfeljebb öt hibakilépést gyűjtsön.
Warning
Az összeomlási memóriaképek jelentős lemezterületet foglalhatnak el (akár több gigabájtot is egyenként).
Az alkalmazás nem válaszol, indításkor meghiúsul, vagy normál módon fut
Ha egy alkalmazás nem válaszol, de nem omlik össze, indítás közben meghiúsul, vagy normál módon fut, olvassa el a User-Mode Memóriaképfájlok: A legjobb eszköz kiválasztása című részt a memóriakép létrehozására megfelelő eszköz kiválasztásához.
A dump elemzése
Egy dump többféle megközelítéssel is elemezhető. További információért lásd a(z) User-Mode memóriaképfájl-elemzését.
További erőforrások
- Mintakód megtekintése vagy letöltése (hogyan lehet letölteni)
- Kestrel végpontkonfigurációs (beleértve a HTTPS-konfigurációt és az SNI-támogatást)
- .NET Generic Host az ASP.NET Core-ban
- Alapvető projektek ASP.NET hibaelhárítása és hibakeresése
A ASP.NET Core-alkalmazások windowsos Windows Service- IIS használata nélkül üzemeltethetők. Windows-szolgáltatásként üzemeltetve az alkalmazás automatikusan elindul a kiszolgáló újraindítása után.
Mintakód megtekintése vagy letöltése (hogyan lehet letölteni)
Prerequisites
Munkás szolgáltatás sablon
A ASP.NET Core Worker Service-sablon kiindulópontként szolgál a hosszú ideig futó szolgáltatásalkalmazások írásához. A sablon használata Windows Service-alkalmazás alapjaként:
- Hozzon létre egy feldolgozószolgáltatás-alkalmazást a .NET-sablonból.
- Az alkalmazáskonfigurációs szakaszban található útmutatást követve frissítse a Worker Service alkalmazást, hogy windowsos szolgáltatásként fusson.
- Hozzon létre egy új projektet.
- Válassza a Munkás szolgáltatáslehetőséget. Válassza a Következőlehetőséget.
- Adjon meg egy projektnevet a Projektnév mezőben, vagy fogadja el az alapértelmezett projektnevet. Válassza a Create gombot.
- Az Új feldolgozói szolgáltatás létrehozása párbeszédpanelen válassza a létrehozása lehetőséget.
Alkalmazáskonfiguráció
Az alkalmazáshoz csomaghivatkozásra van szükség Microsoft.Extensions.Hosting.WindowsServices.
IHostBuilder.UseWindowsService a gazdagép létrehozásakor hívódik meg. Ha az alkalmazás Windows-szolgáltatásként fut, a módszer:
- A gazdagép élettartamát
WindowsServiceLifetimeértékre állítja. - A
tartalomgyökerét az AppContext.BaseDirectoryértékre állítja be. További információért lásd a Aktuális könyvtár és tartalomgyökér részt. - Engedélyezi a naplózást az eseménynaplóba:
- A rendszer az alkalmazásnevet használja az alapértelmezett forrásnévként.
- Az alapértelmezett naplószint Figyelmeztetési vagy magasabb egy ASP.NET Core-sablonon alapuló alkalmazáshoz, amely meghívja
CreateDefaultBuildera gazdagép létrehozásához. - Felülbírálja az alapértelmezett naplószintet a
Logging:EventLog:LogLevel:Defaultkulccsal aappsettings.json/appsettings.{Environment}.jsonvagy más konfigurációs szolgáltatóban. - Csak a rendszergazdák hozhatnak létre új eseményforrásokat. Ha egy eseményforrás nem hozható létre az alkalmazás nevével, a rendszer figyelmeztetést naplóz a alkalmazás forráshoz, és az eseménynaplók le vannak tiltva.
A Program.cs:
-
ContentRootPathbeállítása - Hívás
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();
A témakörhöz a következő mintaalkalmazások kapcsolódnak:
- Háttérmunkaszolgáltatás-minta: A Feldolgozói szolgáltatás sablonon alapuló, alapuló nem webalkalmazás-minta, amely üzemeltetett szolgáltatásokat használ háttérfeladatokhoz.
- Webalkalmazás-szolgáltatás minta: Razor Pages webalkalmazásminta, amely Windows-szolgáltatásként működik, üzemeltetett szolgáltatásokkal, háttérfeladatokhoz.
Az MVC-vel kapcsolatos útmutatásért tekintse meg ASP.NET Core MVC és Migrálás ASP.NET Core 2.2-ről 3.0-racímű cikkeket.
Üzembe helyezés típusa
Az üzembe helyezési forgatókönyvekkel kapcsolatos információkért és tanácsért tekintse meg a .NET-alkalmazások üzembe helyezését ismertető témakört.
SDK
A Razor Pages vagy MVC keretrendszereket használó webalkalmazás-alapú szolgáltatások esetében adja meg a webes SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Web">
Ha a szolgáltatás csak háttérfeladatokat hajt végre (például üzemeltetett szolgáltatások), adja meg a Feldolgozó SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Worker">
Keretrendszerfüggő üzembe helyezés (FDD)
A keretrendszerfüggő üzembe helyezés (FDD) a .NET megosztott rendszerszintű verziójának jelenlétére támaszkodik a célrendszeren. Amikor az FDD-forgatókönyvet, azaz a keretrendszerfüggő végrehajtást, a jelen cikkben ismertetett útmutatást követve fogadják el, az SDK egy végrehajtható fájlt (.exe) hoz létre, amelyet keretrendszerfüggő végrehajthatóként neveznek.
A Web SDKhasználata esetén a Windows Services-alkalmazások esetében szükségtelen egy web.config fájl, amely általában az ASP.NET Core-alkalmazások közzétételekor jön létre. A web.config fájl létrehozásának letiltásához adja hozzá a <IsTransformWebConfigDisabled> tulajdonságot a trueértékre állítva.
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
Önálló üzembe helyezés (SCD)
Az önálló üzembe helyezés (SCD) nem támaszkodik egy megosztott keretrendszer jelenlétére a gazdarendszeren. A futtatókörnyezet és az alkalmazás függőségei az alkalmazással együtt vannak üzembe helyezve.
A , amely tartalmazza a célkeretrendszert, tartalmaz egy Windows <PropertyGroup>.
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
Több RID-hez való közzététel:
- Adja meg az RIDs-t pontosvesszővel elválasztott listában.
- Használja a <RuntimeIdentifiers> (többes szám) tulajdonságnevet.
További információ: .NET RID-katalógus.
Szolgáltatásfelhasználói fiók
Ha felhasználói fiókot szeretne létrehozni egy szolgáltatáshoz, használja a New-LocalUser parancsmagot egy rendszergazdai PowerShell 6-parancshéjból.
Windows 10 2018. októberi frissítés (1809-es verzió/10.0.17763-os build) vagy újabb verzió:
New-LocalUser -Name {SERVICE NAME}
Windows operációs rendszeren a 2018. október 10-i frissítésnél korábbi (1809-es verzió/10.0.17763-os build):
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
Ha a rendszer kéri, adjon meg egy erős jelszót.
Ha a -AccountExpires paramétert nem adja meg a New-LocalUser parancsmagnak lejárati DateTime, a fiók nem jár le.
További információ: Microsoft.PowerShell.LocalAccounts és Szolgáltatás felhasználói fiókok.
Az Active Directory használatakor a felhasználók felügyeletének másik módszere a felügyelt szolgáltatásfiókok használata. További információ: csoport által felügyelt szolgáltatásfiókok áttekintése.
Szolgáltatásként való bejelentkezési jogok
A szolgáltatásként való bejelentkezéshez jogosultságok létrehozása egy szolgáltatásfelhasználói fiókhoz:
- Nyissa meg a Helyi biztonsági házirend szerkesztőt secpol.mscfuttatásával.
- Bontsa ki az Helyi házirendek csomópontot, és válassza meg a Felhasználói jogok hozzárendeléselehetőséget.
- Nyissa meg a Szolgáltatásként bejelentkezés házirendet.
- Válassza az Felhasználó vagy csoport hozzáadásalehetőséget.
- Adja meg az objektum nevét (felhasználói fiókot) az alábbi módszerek valamelyikével:
- Írja be a felhasználói fiókot (
{DOMAIN OR COMPUTER NAME\USER}) az objektumnév mezőbe, és válassza az OK lehetőséget a felhasználó szabályzathoz való hozzáadásához. - Válassza a Speciális lehetőséget. Válassza Keresés Most. Válassza ki a felhasználói fiókot a listából. Kattintson az OK gombra. Válassza OK lehetőséget, ha a felhasználót hozzá szeretné adni a szabályzathoz.
- Írja be a felhasználói fiókot (
- A módosítások elfogadásához válassza OK vagy Alkalmaz lehetőséget.
A Windows szolgáltatás létrehozása és kezelése
Szolgáltatás létrehozása
Szolgáltatás regisztrálása PowerShell-parancsokkal. Egy felügyeleti PowerShell 6-parancshéjból hajtsa végre a következő parancsokat:
$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}: Az alkalmazás futtatható útvonala a gazdagépen (példáuld:\myservice). Ne adja meg az alkalmazás végrehajtható fájlnevét az elérési úton. Nincs szükség záró perjelre. -
{DOMAIN OR COMPUTER NAME\USER}: Szolgáltatásfelhasználói fiók (példáulContoso\ServiceUser). -
{SERVICE NAME}: Szolgáltatásnév (példáulMyService). -
{EXE FILE PATH}: Az alkalmazás teljes végrehajtható elérési útja (példáuld:\myservice\myservice.exe). Adja meg a végrehajtható fájl nevét a kiterjesztéssel. -
{EXE FOLDER PATH}: Az alkalmazás teljes végrehajtható mappa elérési útja (példáuld:\myservice). -
{DESCRIPTION}: Szolgáltatás leírása (példáulMy sample service). -
{DISPLAY NAME}: Szolgáltatásmegjelenítés neve (példáulMy Service).
Szolgáltatás indítása
Szolgáltatás indítása a következő PowerShell 6-paranccsal:
Start-Service -Name {SERVICE NAME}
A parancs néhány másodpercet vesz igénybe a szolgáltatás elindításához.
Szolgáltatás állapotának meghatározása
Egy szolgáltatás állapotának ellenőrzéséhez használja a következő PowerShell 6-parancsot:
Get-Service -Name {SERVICE NAME}
Az állapot a következő értékek egyikeként lesz jelentve:
StartingRunningStoppingStopped
Szolgáltatás leállítása
Szolgáltatás leállítása a következő PowerShell 6 paranccsal:
Stop-Service -Name {SERVICE NAME}
Szolgáltatás eltávolítása
A szolgáltatás leállításának rövid késleltetése után távolítsa el a következő PowerShell 6-parancsot tartalmazó szolgáltatást:
Remove-Service -Name {SERVICE NAME}
Proxykiszolgáló és terheléselosztó forgatókönyvek
Az internetről vagy a vállalati hálózatról érkező kérésekkel kommunikáló, proxy vagy terheléselosztó mögött található szolgáltatások további konfigurációt igényelhetnek. További információ: A ASP.NET Core konfigurálása proxykiszolgálókkal és terheléselosztókkal.
Végpontok konfigurálása
Alapértelmezés szerint az ASP.NET Core a http://localhost:5000értékhez köt. Konfigurálja az URL-címet és a portot a ASPNETCORE_URLS környezeti változó beállításával.
További URL- és portkonfigurációs megközelítésekért tekintse meg a kiszolgáló vonatkozó cikkét:
- Végpontok konfigurálása az ASP.NET Core Kestrel webkiszolgálóhoz
- HTTP.sys webszerver implementálása ASP.NET Core-ban
Az előző útmutató a HTTPS-végpontok támogatását ismerteti. Konfigurálja például az alkalmazást HTTPS-hez, amikor a hitelesítést Windows-szolgáltatással használják.
Note
Az ASP.NET Core HTTPS fejlesztési tanúsítvány használata szolgáltatásvégpont védelmére nem támogatott.
Aktuális könyvtár és tartalomgyökér
A Windows-szolgáltatás GetCurrentDirectory hívásával visszaadott aktuális munkakönyvtár a C:\WINDOWS\system32 mappa. A system32 mappa nem megfelelő hely a szolgáltatás fájljainak tárolására (például beállításfájlok). Az alábbi módszerek egyikével karbantarthatja és elérheti a szolgáltatás eszköz- és beállításfájljait.
A ContentRootPath vagy a ContentRootFileProvider használata
Az alkalmazás erőforrásainak megkereséséhez használja IHostEnvironment.ContentRootPath vagy ContentRootFileProvider.
Amikor az alkalmazás szolgáltatásként fut, a UseWindowsService beállítja a ContentRootPath-et az AppContext.BaseDirectory-ra.
Az alkalmazás alapértelmezett beállításfájljai (appsettings.json és appsettings.{Environment}.json) az alkalmazás tartalomgyökeréből töltődnek be úgy, hogy meghívják CreateDefaultBuildert a gazdagépépítési.
Az ConfigureAppConfigurationfejlesztői kódjával betöltött egyéb beállításfájlok esetében nincs szükség SetBasePathhívására. Az alábbi példában a custom_settings.json fájl az alkalmazás tartalomgyökerében található, és anélkül van betöltve, hogy explicit módon beállítanál egy alap elérési utat:
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>();
});
}
Ne próbálja meg GetCurrentDirectory erőforrás-elérési út beszerzését, mert egy Windows szolgáltatás alkalmazás a C:\WINDOWS\system32 mappát adja vissza aktuális könyvtárként.
A szolgáltatás fájljainak tárolása megfelelő helyen a lemezen
Adjon meg egy abszolút elérési utat SetBasePath a fájlokat tartalmazó mappához IConfigurationBuilder használatakor.
Troubleshoot
A Windows szolgáltatásalkalmazások hibaelhárításához lásd: ASP.NET Core projektek hibaelhárítása és hibakeresése.
Gyakori hibák
- A PowerShell egy régi vagy előzetes verziója van használatban.
- A regisztrált szolgáltatás nem használja az alkalmazás közzétett kimenetét a dotnet publish parancsból. A dotnet build parancs kimenete nem támogatott alkalmazások telepítéséhez. A közzétett eszközök az üzembe helyezés típusától függően az alábbi mappák egyikében találhatók:
- bin/Release/{TARGET FRAMEWORK}/publish (FDD)
- bin/Release/{TARGET FRAMEWORK}/{RUNTIME IDENTIFIER}/publish (SCD)
- A szolgáltatás nem futó állapotban van.
- Az alkalmazás által használt erőforrások elérési útjai (például tanúsítványok) helytelenek. A Windows-szolgáltatások alap elérési útja c:\Windows\System32.
- A felhasználó nem rendelkezik szolgáltatásként való bejelentkezéssel jogosultságokkal.
- A felhasználó jelszava lejárt vagy helytelenül lett átadva a
New-ServicePowerShell-parancs végrehajtásakor. - Az alkalmazáshoz ASP.NET Core-hitelesítés szükséges, de nincs konfigurálva biztonságos kapcsolatokhoz (HTTPS).
- A kérelem URL-portja helytelen vagy nem megfelelően van konfigurálva az alkalmazásban.
Rendszer- és alkalmazásesemény-naplók
Hozzáférés a rendszer- és alkalmazásesemény-naplókhoz:
- Nyissa meg a Start menüt, keresse meg Eseménynapló, és válassza ki az Eseménynapló alkalmazást.
- Az Eseménynaplónézetben nyissa meg a Windows-naplók csomópontot.
- Válassza Rendszer lehetőséget a Rendszeresemény-napló megnyitásához. Válassza Alkalmazás lehetőséget az alkalmazásesemény-napló megnyitásához.
- Keresse meg a hibás alkalmazáshoz társított hibákat.
Az alkalmazás futtatása parancssorban
Számos indítási hiba nem hoz létre hasznos információkat az eseménynaplókban. A hibák okának megtalálásához futtassa az alkalmazást egy parancssorban az üzemeltetési rendszeren. Ha további részleteket szeretne naplózni az alkalmazásból, csökkentse a naplószintet, vagy futtassa az alkalmazást a fejlesztői környezetben.
Csomagcache-k törlése
A működő alkalmazások a .NET SDK fejlesztői gépen való frissítése vagy az alkalmazás csomagverzióinak módosítása után azonnal meghiúsulhatnak. Bizonyos esetekben az inkognitó csomagok megszakíthatják az alkalmazásokat a nagyobb frissítések végrehajtásakor. A legtöbb ilyen probléma az alábbi utasítások követésével javítható:
Törölje a tároló, a és a obj, valamint a mappákat.
Törölje a csomaggyorsítótárakat a parancshéjban a dotnet nuget locals all --clear parancs végrehajtásával.
A csomaggyorsítótárak törlése az nuget.exe eszközzel és a parancs
nuget locals all -clearvégrehajtásával is elvégezhető. nuget.exe nincs csomagban a Windows asztali operációs rendszerrel, és külön kell beszerezni a NuGet webhelyről.Állítsa vissza és építse újra a projektet.
Az alkalmazás ismételt üzembe helyezése előtt törölje a kiszolgáló üzembehelyezési mappájában lévő összes fájlt.
Lassú vagy nem válaszoló alkalmazás
Az memóriamásolat a rendszer memóriájának pillanatképe, amely segít meghatározni az alkalmazás összeomlásának, indítási hibájának, vagy az alkalmazás lassúságának okát.
Az alkalmazás összeomlik vagy kivételt tapasztal
Memóriakép beszerzése és elemzése a Windows hibajelentési (WER) rendszerből :
Hozzon létre egy mappát, amely az összeomlási memóriaképfájlokat tartalmazza a
c:\dumpshelyen.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás futtatható fájljának nevével:
.\EnableDumps {APPLICATION EXE} c:\dumpsFuttassa az alkalmazást az összeomlást okozó feltételek között.
Az összeomlás után futtassa a DisableDumps PowerShell-szkriptet:
.\DisableDumps {APPLICATION EXE}
Az alkalmazás összeomlása és a hibajegy-gyűjtés befejezése után az alkalmazás normál módon leállítható. A PowerShell-szkript úgy konfigurálja a WER-t, hogy alkalmazásonként legfeljebb öt hibakilépést gyűjtsön.
Warning
Az összeomlási memóriaképek jelentős lemezterületet foglalhatnak el (akár több gigabájtot is egyenként).
Az alkalmazás nem válaszol, indításkor meghiúsul, vagy normál módon fut
Ha egy alkalmazás nem válaszol, de nem omlik össze, indítás közben meghiúsul, vagy normál módon fut, olvassa el a User-Mode Memóriaképfájlok: A legjobb eszköz kiválasztása című részt a memóriakép létrehozására megfelelő eszköz kiválasztásához.
A dump elemzése
Egy dump többféle megközelítéssel is elemezhető. További információért lásd a(z) User-Mode memóriaképfájl-elemzését.
További erőforrások
- Kestrel végpontkonfigurációs (beleértve a HTTPS-konfigurációt és az SNI-támogatást)
- .NET Generic Host az ASP.NET Core-ban
- Alapvető projektek ASP.NET hibaelhárítása és hibakeresése
A ASP.NET Core-alkalmazások windowsos Windows Service- IIS használata nélkül üzemeltethetők. Windows-szolgáltatásként üzemeltetve az alkalmazás automatikusan elindul a kiszolgáló újraindítása után.
Mintakód megtekintése vagy letöltése (hogyan lehet letölteni)
Prerequisites
Munkás szolgáltatás sablon
A ASP.NET Core Worker Service-sablon kiindulópontként szolgál a hosszú ideig futó szolgáltatásalkalmazások írásához. A sablon használata Windows Service-alkalmazás alapjaként:
- Hozzon létre egy feldolgozószolgáltatás-alkalmazást a .NET-sablonból.
- Az alkalmazáskonfigurációs szakaszban található útmutatást követve frissítse a Worker Service alkalmazást, hogy windowsos szolgáltatásként fusson.
- Hozzon létre egy új projektet.
- Válassza a Munkás szolgáltatáslehetőséget. Válassza a Következőlehetőséget.
- Adjon meg egy projektnevet a Projektnév mezőben, vagy fogadja el az alapértelmezett projektnevet. Válassza a Create gombot.
- Az Új feldolgozói szolgáltatás létrehozása párbeszédpanelen válassza a létrehozása lehetőséget.
Alkalmazáskonfiguráció
Az alkalmazáshoz csomaghivatkozásra van szükség Microsoft.Extensions.Hosting.WindowsServices.
IHostBuilder.UseWindowsService a gazdagép létrehozásakor hívódik meg. Ha az alkalmazás Windows-szolgáltatásként fut, a módszer:
- A gazdagép élettartamát
WindowsServiceLifetimeértékre állítja. - A
tartalomgyökerét az AppContext.BaseDirectoryértékre állítja be. További információért lásd a Aktuális könyvtár és tartalomgyökér részt. - Engedélyezi a naplózást az eseménynaplóba:
- A rendszer az alkalmazásnevet használja az alapértelmezett forrásnévként.
- Az alapértelmezett naplószint Figyelmeztetési vagy magasabb egy ASP.NET Core-sablonon alapuló alkalmazáshoz, amely meghívja
CreateDefaultBuildera gazdagép létrehozásához. - Felülbírálja az alapértelmezett naplószintet a
Logging:EventLog:LogLevel:Defaultkulccsal aappsettings.json/appsettings.{Environment}.jsonvagy más konfigurációs szolgáltatóban. - Csak a rendszergazdák hozhatnak létre új eseményforrásokat. Ha egy eseményforrás nem hozható létre az alkalmazás nevével, a rendszer figyelmeztetést naplóz a alkalmazás forráshoz, és az eseménynaplók le vannak tiltva.
A(z) CreateHostBuilderProgram.cs-jában:
Host.CreateDefaultBuilder(args)
.UseWindowsService()
...
A témakörhöz a következő mintaalkalmazások kapcsolódnak:
- Háttérmunkaszolgáltatás-minta: A Feldolgozói szolgáltatás sablonon alapuló, alapuló nem webalkalmazás-minta, amely üzemeltetett szolgáltatásokat használ háttérfeladatokhoz.
- Webalkalmazás-szolgáltatás minta: Razor Pages webalkalmazásminta, amely Windows-szolgáltatásként működik, üzemeltetett szolgáltatásokkal, háttérfeladatokhoz.
Az MVC-vel kapcsolatos útmutatásért tekintse meg ASP.NET Core MVC és Migrálás ASP.NET Core 2.2-ről 3.0-racímű cikkeket.
Üzembe helyezés típusa
Az üzembe helyezési forgatókönyvekkel kapcsolatos információkért és tanácsért tekintse meg a .NET-alkalmazások üzembe helyezését ismertető témakört.
SDK
A Razor Pages vagy MVC keretrendszereket használó webalkalmazás-alapú szolgáltatások esetében adja meg a webes SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Web">
Ha a szolgáltatás csak háttérfeladatokat hajt végre (például üzemeltetett szolgáltatások), adja meg a Feldolgozó SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Worker">
Keretrendszerfüggő üzembe helyezés (FDD)
A keretrendszerfüggő üzembe helyezés (FDD) a .NET megosztott rendszerszintű verziójának jelenlétére támaszkodik a célrendszeren. Amikor az FDD-forgatókönyvet, azaz a keretrendszerfüggő végrehajtást, a jelen cikkben ismertetett útmutatást követve fogadják el, az SDK egy végrehajtható fájlt (.exe) hoz létre, amelyet keretrendszerfüggő végrehajthatóként neveznek.
A Web SDKhasználata esetén a Windows Services-alkalmazások esetében szükségtelen egy web.config fájl, amely általában az ASP.NET Core-alkalmazások közzétételekor jön létre. A web.config fájl létrehozásának letiltásához adja hozzá a <IsTransformWebConfigDisabled> tulajdonságot a trueértékre állítva.
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
Önálló üzembe helyezés (SCD)
Az önálló üzembe helyezés (SCD) nem támaszkodik egy megosztott keretrendszer jelenlétére a gazdarendszeren. A futtatókörnyezet és az alkalmazás függőségei az alkalmazással együtt vannak üzembe helyezve.
A , amely tartalmazza a célkeretrendszert, tartalmaz egy Windows <PropertyGroup>.
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
Több RID-hez való közzététel:
- Adja meg az RIDs-t pontosvesszővel elválasztott listában.
- Használja a <RuntimeIdentifiers> (többes szám) tulajdonságnevet.
További információ: .NET RID-katalógus.
Szolgáltatásfelhasználói fiók
Ha felhasználói fiókot szeretne létrehozni egy szolgáltatáshoz, használja a New-LocalUser parancsmagot egy rendszergazdai PowerShell 6-parancshéjból.
Windows 10 2018. októberi frissítés (1809-es verzió/10.0.17763-os build) vagy újabb verzió:
New-LocalUser -Name {SERVICE NAME}
Windows operációs rendszeren a 2018. október 10-i frissítésnél korábbi (1809-es verzió/10.0.17763-os build):
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
Ha a rendszer kéri, adjon meg egy erős jelszót.
Ha a -AccountExpires paramétert nem adja meg a New-LocalUser parancsmagnak lejárati DateTime, a fiók nem jár le.
További információ: Microsoft.PowerShell.LocalAccounts és Szolgáltatás felhasználói fiókok.
Az Active Directory használatakor a felhasználók felügyeletének másik módszere a felügyelt szolgáltatásfiókok használata. További információ: csoport által felügyelt szolgáltatásfiókok áttekintése.
Szolgáltatásként való bejelentkezési jogok
A szolgáltatásként való bejelentkezéshez jogosultságok létrehozása egy szolgáltatásfelhasználói fiókhoz:
- Nyissa meg a Helyi biztonsági házirend szerkesztőt secpol.mscfuttatásával.
- Bontsa ki az Helyi házirendek csomópontot, és válassza meg a Felhasználói jogok hozzárendeléselehetőséget.
- Nyissa meg a Szolgáltatásként bejelentkezés házirendet.
- Válassza az Felhasználó vagy csoport hozzáadásalehetőséget.
- Adja meg az objektum nevét (felhasználói fiókot) az alábbi módszerek valamelyikével:
- Írja be a felhasználói fiókot (
{DOMAIN OR COMPUTER NAME\USER}) az objektumnév mezőbe, és válassza az OK lehetőséget a felhasználó szabályzathoz való hozzáadásához. - Válassza a Speciális lehetőséget. Válassza Keresés Most. Válassza ki a felhasználói fiókot a listából. Kattintson az OK gombra. Válassza OK lehetőséget, ha a felhasználót hozzá szeretné adni a szabályzathoz.
- Írja be a felhasználói fiókot (
- A módosítások elfogadásához válassza OK vagy Alkalmaz lehetőséget.
A Windows szolgáltatás létrehozása és kezelése
Szolgáltatás létrehozása
Szolgáltatás regisztrálása PowerShell-parancsokkal. Egy felügyeleti PowerShell 6-parancshéjból hajtsa végre a következő parancsokat:
$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}: Az alkalmazás futtatható útvonala a gazdagépen (példáuld:\myservice). Ne adja meg az alkalmazás végrehajtható fájlnevét az elérési úton. Nincs szükség záró perjelre. -
{DOMAIN OR COMPUTER NAME\USER}: Szolgáltatásfelhasználói fiók (példáulContoso\ServiceUser). -
{SERVICE NAME}: Szolgáltatásnév (példáulMyService). -
{EXE FILE PATH}: Az alkalmazás teljes végrehajtható elérési útja (példáuld:\myservice\myservice.exe). Adja meg a végrehajtható fájl nevét a kiterjesztéssel. -
{DESCRIPTION}: Szolgáltatás leírása (példáulMy sample service). -
{DISPLAY NAME}: Szolgáltatásmegjelenítés neve (példáulMy Service).
Szolgáltatás indítása
Szolgáltatás indítása a következő PowerShell 6-paranccsal:
Start-Service -Name {SERVICE NAME}
A parancs néhány másodpercet vesz igénybe a szolgáltatás elindításához.
Szolgáltatás állapotának meghatározása
Egy szolgáltatás állapotának ellenőrzéséhez használja a következő PowerShell 6-parancsot:
Get-Service -Name {SERVICE NAME}
Az állapot a következő értékek egyikeként lesz jelentve:
StartingRunningStoppingStopped
Szolgáltatás leállítása
Szolgáltatás leállítása a következő PowerShell 6 paranccsal:
Stop-Service -Name {SERVICE NAME}
Szolgáltatás eltávolítása
A szolgáltatás leállításának rövid késleltetése után távolítsa el a következő PowerShell 6-parancsot tartalmazó szolgáltatást:
Remove-Service -Name {SERVICE NAME}
Proxykiszolgáló és terheléselosztó forgatókönyvek
Az internetről vagy a vállalati hálózatról érkező kérésekkel kommunikáló, proxy vagy terheléselosztó mögött található szolgáltatások további konfigurációt igényelhetnek. További információ: A ASP.NET Core konfigurálása proxykiszolgálókkal és terheléselosztókkal.
Végpontok konfigurálása
Alapértelmezés szerint az ASP.NET Core a http://localhost:5000értékhez köt. Konfigurálja az URL-címet és a portot a ASPNETCORE_URLS környezeti változó beállításával.
További URL- és portkonfigurációs megközelítésekért tekintse meg a kiszolgáló vonatkozó cikkét:
- Végpontok konfigurálása az ASP.NET Core Kestrel webkiszolgálóhoz
- HTTP.sys webszerver implementálása ASP.NET Core-ban
Az előző útmutató a HTTPS-végpontok támogatását ismerteti. Konfigurálja például az alkalmazást HTTPS-hez, amikor a hitelesítést Windows-szolgáltatással használják.
Note
Az ASP.NET Core HTTPS fejlesztési tanúsítvány használata szolgáltatásvégpont védelmére nem támogatott.
Aktuális könyvtár és tartalomgyökér
A Windows-szolgáltatás GetCurrentDirectory hívásával visszaadott aktuális munkakönyvtár a C:\WINDOWS\system32 mappa. A system32 mappa nem megfelelő hely a szolgáltatás fájljainak tárolására (például beállításfájlok). Az alábbi módszerek egyikével karbantarthatja és elérheti a szolgáltatás eszköz- és beállításfájljait.
A ContentRootPath vagy a ContentRootFileProvider használata
Az alkalmazás erőforrásainak megkereséséhez használja IHostEnvironment.ContentRootPath vagy ContentRootFileProvider.
Amikor az alkalmazás szolgáltatásként fut, a UseWindowsService beállítja a ContentRootPath-et az AppContext.BaseDirectory-ra.
Az alkalmazás alapértelmezett beállításfájljai (appsettings.json és appsettings.{Environment}.json) az alkalmazás tartalomgyökeréből töltődnek be úgy, hogy meghívják CreateDefaultBuildert a gazdagépépítési.
Az ConfigureAppConfigurationfejlesztői kódjával betöltött egyéb beállításfájlok esetében nincs szükség SetBasePathhívására. Az alábbi példában a custom_settings.json fájl az alkalmazás tartalomgyökerében található, és anélkül van betöltve, hogy explicit módon beállítanál egy alap elérési utat:
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>();
});
}
Ne próbálja meg GetCurrentDirectory erőforrás-elérési út beszerzését, mert egy Windows szolgáltatás alkalmazás a C:\WINDOWS\system32 mappát adja vissza aktuális könyvtárként.
A szolgáltatás fájljainak tárolása megfelelő helyen a lemezen
Adjon meg egy abszolút elérési utat SetBasePath a fájlokat tartalmazó mappához IConfigurationBuilder használatakor.
Troubleshoot
A Windows szolgáltatásalkalmazások hibaelhárításához lásd: ASP.NET Core projektek hibaelhárítása és hibakeresése.
Gyakori hibák
- A PowerShell egy régi vagy előzetes verziója van használatban.
- A regisztrált szolgáltatás nem használja az alkalmazás közzétett kimenetét a dotnet publish parancsból. A dotnet build parancs kimenete nem támogatott alkalmazások telepítéséhez. A közzétett eszközök az üzembe helyezés típusától függően az alábbi mappák egyikében találhatók:
- bin/Release/{TARGET FRAMEWORK}/publish (FDD)
- bin/Release/{TARGET FRAMEWORK}/{RUNTIME IDENTIFIER}/publish (SCD)
- A szolgáltatás nem futó állapotban van.
- Az alkalmazás által használt erőforrások elérési útjai (például tanúsítványok) helytelenek. A Windows-szolgáltatások alap elérési útja c:\Windows\System32.
- A felhasználó nem rendelkezik szolgáltatásként való bejelentkezéssel jogosultságokkal.
- A felhasználó jelszava lejárt vagy helytelenül lett átadva a
New-ServicePowerShell-parancs végrehajtásakor. - Az alkalmazáshoz ASP.NET Core-hitelesítés szükséges, de nincs konfigurálva biztonságos kapcsolatokhoz (HTTPS).
- A kérelem URL-portja helytelen vagy nem megfelelően van konfigurálva az alkalmazásban.
Rendszer- és alkalmazásesemény-naplók
Hozzáférés a rendszer- és alkalmazásesemény-naplókhoz:
- Nyissa meg a Start menüt, keresse meg Eseménynapló, és válassza ki az Eseménynapló alkalmazást.
- Az Eseménynaplónézetben nyissa meg a Windows-naplók csomópontot.
- Válassza Rendszer lehetőséget a Rendszeresemény-napló megnyitásához. Válassza Alkalmazás lehetőséget az alkalmazásesemény-napló megnyitásához.
- Keresse meg a hibás alkalmazáshoz társított hibákat.
Az alkalmazás futtatása parancssorban
Számos indítási hiba nem hoz létre hasznos információkat az eseménynaplókban. A hibák okának megtalálásához futtassa az alkalmazást egy parancssorban az üzemeltetési rendszeren. Ha további részleteket szeretne naplózni az alkalmazásból, csökkentse a naplószintet, vagy futtassa az alkalmazást a fejlesztői környezetben.
Csomagcache-k törlése
A működő alkalmazások a .NET SDK fejlesztői gépen való frissítése vagy az alkalmazás csomagverzióinak módosítása után azonnal meghiúsulhatnak. Bizonyos esetekben az inkognitó csomagok megszakíthatják az alkalmazásokat a nagyobb frissítések végrehajtásakor. A legtöbb ilyen probléma az alábbi utasítások követésével javítható:
Törölje a tároló, a és a obj, valamint a mappákat.
Törölje a csomaggyorsítótárakat a parancshéjban a dotnet nuget locals all --clear parancs végrehajtásával.
A csomaggyorsítótárak törlése az nuget.exe eszközzel és a parancs
nuget locals all -clearvégrehajtásával is elvégezhető. nuget.exe nincs csomagban a Windows asztali operációs rendszerrel, és külön kell beszerezni a NuGet webhelyről.Állítsa vissza és építse újra a projektet.
Az alkalmazás ismételt üzembe helyezése előtt törölje a kiszolgáló üzembehelyezési mappájában lévő összes fájlt.
Lassú vagy nem válaszoló alkalmazás
Az memóriamásolat a rendszer memóriájának pillanatképe, amely segít meghatározni az alkalmazás összeomlásának, indítási hibájának, vagy az alkalmazás lassúságának okát.
Az alkalmazás összeomlik vagy kivételt tapasztal
Memóriakép beszerzése és elemzése a Windows hibajelentési (WER) rendszerből :
Hozzon létre egy mappát, amely az összeomlási memóriaképfájlokat tartalmazza a
c:\dumpshelyen.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás futtatható fájljának nevével:
.\EnableDumps {APPLICATION EXE} c:\dumpsFuttassa az alkalmazást az összeomlást okozó feltételek között.
Az összeomlás után futtassa a DisableDumps PowerShell-szkriptet:
.\DisableDumps {APPLICATION EXE}
Az alkalmazás összeomlása és a hibajegy-gyűjtés befejezése után az alkalmazás normál módon leállítható. A PowerShell-szkript úgy konfigurálja a WER-t, hogy alkalmazásonként legfeljebb öt hibakilépést gyűjtsön.
Warning
Az összeomlási memóriaképek jelentős lemezterületet foglalhatnak el (akár több gigabájtot is egyenként).
Az alkalmazás nem válaszol, indításkor meghiúsul, vagy normál módon fut
Ha egy alkalmazás nem válaszol, de nem omlik össze, indítás közben meghiúsul, vagy normál módon fut, olvassa el a User-Mode Memóriaképfájlok: A legjobb eszköz kiválasztása című részt a memóriakép létrehozására megfelelő eszköz kiválasztásához.
A dump elemzése
Egy dump többféle megközelítéssel is elemezhető. További információért lásd a(z) User-Mode memóriaképfájl-elemzését.
További erőforrások
- Kestrel végpontkonfigurációs (beleértve a HTTPS-konfigurációt és az SNI-támogatást)
- .NET Generic Host az ASP.NET Core-ban
- Alapvető projektek ASP.NET hibaelhárítása és hibakeresése
A ASP.NET Core-alkalmazások windowsos Windows Service- IIS használata nélkül üzemeltethetők. Windows-szolgáltatásként üzemeltetve az alkalmazás automatikusan elindul a kiszolgáló újraindítása után.
Mintakód megtekintése vagy letöltése (hogyan lehet letölteni)
Prerequisites
Munkás szolgáltatás sablon
A ASP.NET Core Worker Service-sablon kiindulópontként szolgál a hosszú ideig futó szolgáltatásalkalmazások írásához. A sablon használata Windows Service-alkalmazás alapjaként:
- Hozzon létre egy feldolgozószolgáltatás-alkalmazást a .NET-sablonból.
- Az alkalmazáskonfigurációs szakaszban található útmutatást követve frissítse a Worker Service alkalmazást, hogy windowsos szolgáltatásként fusson.
- Hozzon létre egy új projektet.
- Válassza a Munkás szolgáltatáslehetőséget. Válassza a Következőlehetőséget.
- Adjon meg egy projektnevet a Projektnév mezőben, vagy fogadja el az alapértelmezett projektnevet. Válassza a Create gombot.
- Az Új feldolgozói szolgáltatás létrehozása párbeszédpanelen válassza a létrehozása lehetőséget.
Alkalmazáskonfiguráció
Az alkalmazáshoz csomaghivatkozásra van szükség Microsoft.Extensions.Hosting.WindowsServices.
IHostBuilder.UseWindowsService a gazdagép létrehozásakor hívódik meg. Ha az alkalmazás Windows-szolgáltatásként fut, a módszer:
- A gazdagép élettartamát
WindowsServiceLifetimeértékre állítja. - A
tartalomgyökerét az AppContext.BaseDirectoryértékre állítja be. További információért lásd a Aktuális könyvtár és tartalomgyökér részt. - Engedélyezi a naplózást az eseménynaplóba:
- A rendszer az alkalmazásnevet használja az alapértelmezett forrásnévként.
- Az alapértelmezett naplószint Figyelmeztetési vagy magasabb egy ASP.NET Core-sablonon alapuló alkalmazáshoz, amely meghívja
CreateDefaultBuildera gazdagép létrehozásához. - Felülbírálja az alapértelmezett naplószintet a
Logging:EventLog:LogLevel:Defaultkulccsal aappsettings.json/appsettings.{Environment}.jsonvagy más konfigurációs szolgáltatóban. - Csak a rendszergazdák hozhatnak létre új eseményforrásokat. Ha egy eseményforrás nem hozható létre az alkalmazás nevével, a rendszer figyelmeztetést naplóz a alkalmazás forráshoz, és az eseménynaplók le vannak tiltva.
A(z) CreateHostBuilderProgram.cs-jában:
Host.CreateDefaultBuilder(args)
.UseWindowsService()
...
A témakörhöz a következő mintaalkalmazások kapcsolódnak:
- Háttérmunkaszolgáltatás-minta: A Feldolgozói szolgáltatás sablonon alapuló, alapuló nem webalkalmazás-minta, amely üzemeltetett szolgáltatásokat használ háttérfeladatokhoz.
- Webalkalmazás-szolgáltatás minta: Razor Pages webalkalmazásminta, amely Windows-szolgáltatásként működik, üzemeltetett szolgáltatásokkal, háttérfeladatokhoz.
Az MVC-vel kapcsolatos útmutatásért tekintse meg ASP.NET Core MVC és Migrálás ASP.NET Core 2.2-ről 3.0-racímű cikkeket.
Üzembe helyezés típusa
Az üzembe helyezési forgatókönyvekkel kapcsolatos információkért és tanácsért tekintse meg a .NET-alkalmazások üzembe helyezését ismertető témakört.
SDK
A Razor Pages vagy MVC keretrendszereket használó webalkalmazás-alapú szolgáltatások esetében adja meg a webes SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Web">
Ha a szolgáltatás csak háttérfeladatokat hajt végre (például üzemeltetett szolgáltatások), adja meg a Feldolgozó SDK-t a projektfájlban:
<Project Sdk="Microsoft.NET.Sdk.Worker">
Keretrendszerfüggő üzembe helyezés (FDD)
A keretrendszerfüggő üzembe helyezés (FDD) a .NET megosztott rendszerszintű verziójának jelenlétére támaszkodik a célrendszeren. Amikor az FDD-forgatókönyvet, azaz a keretrendszerfüggő végrehajtást, a jelen cikkben ismertetett útmutatást követve fogadják el, az SDK egy végrehajtható fájlt (.exe) hoz létre, amelyet keretrendszerfüggő végrehajthatóként neveznek.
A Web SDKhasználata esetén a Windows Services-alkalmazások esetében szükségtelen egy web.config fájl, amely általában az ASP.NET Core-alkalmazások közzétételekor jön létre. A web.config fájl létrehozásának letiltásához adja hozzá a <IsTransformWebConfigDisabled> tulajdonságot a trueértékre állítva.
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
Önálló üzembe helyezés (SCD)
Az önálló üzembe helyezés (SCD) nem támaszkodik egy megosztott keretrendszer jelenlétére a gazdarendszeren. A futtatókörnyezet és az alkalmazás függőségei az alkalmazással együtt vannak üzembe helyezve.
A , amely tartalmazza a célkeretrendszert, tartalmaz egy Windows <PropertyGroup>.
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
Több RID-hez való közzététel:
- Adja meg az RIDs-t pontosvesszővel elválasztott listában.
- Használja a <RuntimeIdentifiers> (többes szám) tulajdonságnevet.
További információ: .NET RID-katalógus.
Szolgáltatásfelhasználói fiók
Ha felhasználói fiókot szeretne létrehozni egy szolgáltatáshoz, használja a New-LocalUser parancsmagot egy rendszergazdai PowerShell 6-parancshéjból.
Windows 10 2018. októberi frissítés (1809-es verzió/10.0.17763-os build) vagy újabb verzió:
New-LocalUser -Name {SERVICE NAME}
Windows operációs rendszeren a 2018. október 10-i frissítésnél korábbi (1809-es verzió/10.0.17763-os build):
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
Ha a rendszer kéri, adjon meg egy erős jelszót.
Ha a -AccountExpires paramétert nem adja meg a New-LocalUser parancsmagnak lejárati DateTime, a fiók nem jár le.
További információ: Microsoft.PowerShell.LocalAccounts és Szolgáltatás felhasználói fiókok.
Az Active Directory használatakor a felhasználók felügyeletének másik módszere a felügyelt szolgáltatásfiókok használata. További információ: csoport által felügyelt szolgáltatásfiókok áttekintése.
Szolgáltatásként való bejelentkezési jogok
A szolgáltatásként való bejelentkezéshez jogosultságok létrehozása egy szolgáltatásfelhasználói fiókhoz:
- Nyissa meg a Helyi biztonsági házirend szerkesztőt secpol.mscfuttatásával.
- Bontsa ki az Helyi házirendek csomópontot, és válassza meg a Felhasználói jogok hozzárendeléselehetőséget.
- Nyissa meg a Szolgáltatásként bejelentkezés házirendet.
- Válassza az Felhasználó vagy csoport hozzáadásalehetőséget.
- Adja meg az objektum nevét (felhasználói fiókot) az alábbi módszerek valamelyikével:
- Írja be a felhasználói fiókot (
{DOMAIN OR COMPUTER NAME\USER}) az objektumnév mezőbe, és válassza az OK lehetőséget a felhasználó szabályzathoz való hozzáadásához. - Válassza a Speciális lehetőséget. Válassza Keresés Most. Válassza ki a felhasználói fiókot a listából. Kattintson az OK gombra. Válassza OK lehetőséget, ha a felhasználót hozzá szeretné adni a szabályzathoz.
- Írja be a felhasználói fiókot (
- A módosítások elfogadásához válassza OK vagy Alkalmaz lehetőséget.
A Windows szolgáltatás létrehozása és kezelése
Szolgáltatás létrehozása
Szolgáltatás regisztrálása PowerShell-parancsokkal. Egy felügyeleti PowerShell 6-parancshéjból hajtsa végre a következő parancsokat:
$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}: Az alkalmazás futtatható útvonala a gazdagépen (példáuld:\myservice). Ne adja meg az alkalmazás végrehajtható fájlnevét az elérési úton. Nincs szükség záró perjelre. -
{DOMAIN OR COMPUTER NAME\USER}: Szolgáltatásfelhasználói fiók (példáulContoso\ServiceUser). -
{SERVICE NAME}: Szolgáltatásnév (példáulMyService). -
{EXE FILE PATH}: Az alkalmazás teljes végrehajtható elérési útja (példáuld:\myservice\myservice.exe). Adja meg a végrehajtható fájl nevét a kiterjesztéssel. -
{DESCRIPTION}: Szolgáltatás leírása (példáulMy sample service). -
{DISPLAY NAME}: Szolgáltatásmegjelenítés neve (példáulMy Service).
Szolgáltatás indítása
Szolgáltatás indítása a következő PowerShell 6-paranccsal:
Start-Service -Name {SERVICE NAME}
A parancs néhány másodpercet vesz igénybe a szolgáltatás elindításához.
Szolgáltatás állapotának meghatározása
Egy szolgáltatás állapotának ellenőrzéséhez használja a következő PowerShell 6-parancsot:
Get-Service -Name {SERVICE NAME}
Az állapot a következő értékek egyikeként lesz jelentve:
StartingRunningStoppingStopped
Szolgáltatás leállítása
Szolgáltatás leállítása a következő PowerShell 6 paranccsal:
Stop-Service -Name {SERVICE NAME}
Szolgáltatás eltávolítása
A szolgáltatás leállításának rövid késleltetése után távolítsa el a következő PowerShell 6-parancsot tartalmazó szolgáltatást:
Remove-Service -Name {SERVICE NAME}
Proxykiszolgáló és terheléselosztó forgatókönyvek
Az internetről vagy a vállalati hálózatról érkező kérésekkel kommunikáló, proxy vagy terheléselosztó mögött található szolgáltatások további konfigurációt igényelhetnek. További információ: A ASP.NET Core konfigurálása proxykiszolgálókkal és terheléselosztókkal.
Végpontok konfigurálása
Alapértelmezés szerint az ASP.NET Core a http://localhost:5000értékhez köt. Konfigurálja az URL-címet és a portot a ASPNETCORE_URLS környezeti változó beállításával.
További URL- és portkonfigurációs megközelítésekért tekintse meg a kiszolgáló vonatkozó cikkét:
Az előző útmutató a HTTPS-végpontok támogatását ismerteti. Konfigurálja például az alkalmazást HTTPS-hez, amikor a hitelesítést Windows-szolgáltatással használják.
Note
Az ASP.NET Core HTTPS fejlesztési tanúsítvány használata szolgáltatásvégpont védelmére nem támogatott.
Aktuális könyvtár és tartalomgyökér
A Windows-szolgáltatás GetCurrentDirectory hívásával visszaadott aktuális munkakönyvtár a C:\WINDOWS\system32 mappa. A system32 mappa nem megfelelő hely a szolgáltatás fájljainak tárolására (például beállításfájlok). Az alábbi módszerek egyikével karbantarthatja és elérheti a szolgáltatás eszköz- és beállításfájljait.
A ContentRootPath vagy a ContentRootFileProvider használata
Az alkalmazás erőforrásainak megkereséséhez használja IHostEnvironment.ContentRootPath vagy ContentRootFileProvider.
Amikor az alkalmazás szolgáltatásként fut, a UseWindowsService beállítja a ContentRootPath-et az AppContext.BaseDirectory-ra.
Az alkalmazás alapértelmezett beállításfájljai (appsettings.json és appsettings.{Environment}.json) az alkalmazás tartalomgyökeréből töltődnek be úgy, hogy meghívják CreateDefaultBuildert a gazdagépépítési.
Az ConfigureAppConfigurationfejlesztői kódjával betöltött egyéb beállításfájlok esetében nincs szükség SetBasePathhívására. Az alábbi példában a custom_settings.json fájl az alkalmazás tartalomgyökerében található, és anélkül van betöltve, hogy explicit módon beállítanál egy alap elérési utat:
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>();
});
}
Ne próbálja meg GetCurrentDirectory erőforrás-elérési út beszerzését, mert egy Windows szolgáltatás alkalmazás a C:\WINDOWS\system32 mappát adja vissza aktuális könyvtárként.
A szolgáltatás fájljainak tárolása megfelelő helyen a lemezen
Adjon meg egy abszolút elérési utat SetBasePath a fájlokat tartalmazó mappához IConfigurationBuilder használatakor.
Troubleshoot
A Windows szolgáltatásalkalmazások hibaelhárításához lásd: ASP.NET Core projektek hibaelhárítása és hibakeresése.
Gyakori hibák
- A PowerShell egy régi vagy előzetes verziója van használatban.
- A regisztrált szolgáltatás nem használja az alkalmazás közzétett kimenetét a dotnet publish parancsból. A dotnet build parancs kimenete nem támogatott alkalmazások telepítéséhez. A közzétett eszközök az üzembe helyezés típusától függően az alábbi mappák egyikében találhatók:
- bin/Release/{TARGET FRAMEWORK}/publish (FDD)
- bin/Release/{TARGET FRAMEWORK}/{RUNTIME IDENTIFIER}/publish (SCD)
- A szolgáltatás nem futó állapotban van.
- Az alkalmazás által használt erőforrások elérési útjai (például tanúsítványok) helytelenek. A Windows-szolgáltatások alap elérési útja c:\Windows\System32.
- A felhasználó nem rendelkezik szolgáltatásként való bejelentkezéssel jogosultságokkal.
- A felhasználó jelszava lejárt vagy helytelenül lett átadva a
New-ServicePowerShell-parancs végrehajtásakor. - Az alkalmazáshoz ASP.NET Core-hitelesítés szükséges, de nincs konfigurálva biztonságos kapcsolatokhoz (HTTPS).
- A kérelem URL-portja helytelen vagy nem megfelelően van konfigurálva az alkalmazásban.
Rendszer- és alkalmazásesemény-naplók
Hozzáférés a rendszer- és alkalmazásesemény-naplókhoz:
- Nyissa meg a Start menüt, keresse meg Eseménynapló, és válassza ki az Eseménynapló alkalmazást.
- Az Eseménynaplónézetben nyissa meg a Windows-naplók csomópontot.
- Válassza Rendszer lehetőséget a Rendszeresemény-napló megnyitásához. Válassza Alkalmazás lehetőséget az alkalmazásesemény-napló megnyitásához.
- Keresse meg a hibás alkalmazáshoz társított hibákat.
Az alkalmazás futtatása parancssorban
Számos indítási hiba nem hoz létre hasznos információkat az eseménynaplókban. A hibák okának megtalálásához futtassa az alkalmazást egy parancssorban az üzemeltetési rendszeren. Ha további részleteket szeretne naplózni az alkalmazásból, csökkentse a naplószintet, vagy futtassa az alkalmazást a fejlesztői környezetben.
Csomagcache-k törlése
A működő alkalmazások a .NET SDK fejlesztői gépen való frissítése vagy az alkalmazás csomagverzióinak módosítása után azonnal meghiúsulhatnak. Bizonyos esetekben az inkognitó csomagok megszakíthatják az alkalmazásokat a nagyobb frissítések végrehajtásakor. A legtöbb ilyen probléma az alábbi utasítások követésével javítható:
Törölje a tároló, a és a obj, valamint a mappákat.
Törölje a csomaggyorsítótárakat a parancshéjban a dotnet nuget locals all --clear parancs végrehajtásával.
A csomaggyorsítótárak törlése az nuget.exe eszközzel és a parancs
nuget locals all -clearvégrehajtásával is elvégezhető. nuget.exe nincs csomagban a Windows asztali operációs rendszerrel, és külön kell beszerezni a NuGet webhelyről.Állítsa vissza és építse újra a projektet.
Az alkalmazás ismételt üzembe helyezése előtt törölje a kiszolgáló üzembehelyezési mappájában lévő összes fájlt.
Lassú vagy nem válaszoló alkalmazás
Az memóriamásolat a rendszer memóriájának pillanatképe, amely segít meghatározni az alkalmazás összeomlásának, indítási hibájának, vagy az alkalmazás lassúságának okát.
Az alkalmazás összeomlik vagy kivételt tapasztal
Memóriakép beszerzése és elemzése a Windows hibajelentési (WER) rendszerből :
Hozzon létre egy mappát, amely az összeomlási memóriaképfájlokat tartalmazza a
c:\dumpshelyen.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás futtatható fájljának nevével:
.\EnableDumps {APPLICATION EXE} c:\dumpsFuttassa az alkalmazást az összeomlást okozó feltételek között.
Az összeomlás után futtassa a DisableDumps PowerShell-szkriptet:
.\DisableDumps {APPLICATION EXE}
Az alkalmazás összeomlása és a hibajegy-gyűjtés befejezése után az alkalmazás normál módon leállítható. A PowerShell-szkript úgy konfigurálja a WER-t, hogy alkalmazásonként legfeljebb öt hibakilépést gyűjtsön.
Warning
Az összeomlási memóriaképek jelentős lemezterületet foglalhatnak el (akár több gigabájtot is egyenként).
Az alkalmazás nem válaszol, indításkor meghiúsul, vagy normál módon fut
Ha egy alkalmazás nem válaszol, de nem omlik össze, indítás közben meghiúsul, vagy normál módon fut, olvassa el a User-Mode Memóriaképfájlok: A legjobb eszköz kiválasztása című részt a memóriakép létrehozására megfelelő eszköz kiválasztásához.
A dump elemzése
Egy dump többféle megközelítéssel is elemezhető. További információért lásd a(z) User-Mode memóriaképfájl-elemzését.
További erőforrások
- Kestrel végpontkonfigurációs (beleértve a HTTPS-konfigurációt és az SNI-támogatást)
- .NET Generic Host az ASP.NET Core-ban
- Alapvető projektek ASP.NET hibaelhárítása és hibakeresése