ASP.NET Core hostolása Windows-szolgáltatásban
Jegyzet
Ez nem a cikk legújabb verziója. A jelenlegi kiadáshoz tekintse meg ennek a cikknek a .NET 9-es verzióját.
Figyelmeztetés
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ást a jelen cikk .NET 9-es verziójában.
Fontos
Ezek az információk egy olyan előzetes termékre vonatkoznak, amelyet a kereskedelmi forgalomba kerülés előtt jelentősen módosíthatnak. A Microsoft nem vállal kifejezett vagy hallgatólagos szavatosságot az itt megadott információkra vonatkozóan.
Az aktuális kiadást a jelen cikk .NET 9-es verziójában.
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.
Előfeltételek
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 Core-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őt.
- Adjon meg egy projektnevet a Projektnév mezőben, vagy fogadja el az alapértelmezett projektnevet. Válassza létrehozása lehetőséget.
- 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
CreateDefaultBuilder
a gazdagép létrehozásához. - Felülbírálja az alapértelmezett naplószintet a
Logging:EventLog:LogLevel:Default
kulccsal aappsettings.json
/appsettings.{Environment}.json
vagy 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ácsokért tekintse meg .NET Core-alkalmazások üzembe helyezési.
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 Core 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 <PropertyGroup>
, amely tartalmazza a célkeretrendszert, tartalmaz egy Windows futtatókörnyezet-azonosítót (RID).
<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 Core 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 Speciális. Válassza Keresés Most. Válassza ki a felhasználói fiókot a listából. Válassza OKlehetőséget. 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:
Starting
Running
Stopping
Stopped
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.
Jegyzet
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.
Hibaelhárítás
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-Service
PowerShell-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 azonnal meghiúsulhatnak, miután frissítették a .NET Core SDK-t a fejlesztői gépen, vagy módosították az alkalmazás csomagverzióit. 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 -clear
vé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:\dumps
helyen.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás futtatható fájljának nevével:
.\EnableDumps {APPLICATION EXE} c:\dumps
Futtassa 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.
Figyelmeztetés
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 töltsük le)
Előfeltételek
Munkavállalói szolgáltatási 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 Core-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(z) Munkavállalói szolgáltatáslehetőséget. Válassza Következőlehetőséget.
- Adjon meg egy projektnevet a Projektnév mezőben, vagy fogadja el az alapértelmezett projektnevet. Válassza a lehetőséget és hozza létre.
- 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. - Az tartalomgyökér beállítása az AppContext.BaseDirectory. További információkért lásd a Aktuális könyvtár és tartalomgyökér szakasz.
- 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és vagy annál magasabb egy ASP.NET Core-sablonra épülő alkalmazás esetén, amely a gazdagép létrehozásához meghívja
CreateDefaultBuilder
. - Az alapértelmezett naplózási szintet írja felül a
Logging:EventLog:LogLevel:Default
kulccsal aappsettings.json
/appsettings.{Environment}.json
-ban vagy más konfigurációszolgáltatónál. - 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
:
-
ContentRootPath
beá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: Egy Razor Pages webalkalmazás-minta, amely Windows-szolgáltatásként fut támogatott szolgáltatásokkal a 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ácsokért tekintse meg .NET Core-alkalmazások üzembe helyezési.
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 Core megosztott rendszerszintű verziójának jelenlétére támaszkodik a célrendszeren. Amikor az FDD-forgatókönyvet a jelen cikkben ismertetett útmutatást követve fogadják el, az SDK létrehoz egy végrehajtható (.exe) nevű keretrendszerfüggő végrehajtható.
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 true
értékre.
<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 Windows futtatókörnyezet-azonosító (RID) a célkeretrendszert tartalmazó <PropertyGroup>
-ben szerepel.
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
Több RID esetén történő közzététel:
- Adja meg az RID-eket pontosvesszővel elválasztott listában.
- Használja a <RuntimeIdentifiers> (többes szám) tulajdonságnevet.
További információ: .NET Core 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áshozzáférési jogokkal való bejelentkezés
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 a Helyi házirendek csomópontot, és válassza Felhasználói jogok hozzárendeléselehetőséget.
- Nyissa meg a Szolgáltatásként való bejelentkezés házirendet.
- Válassza a 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 Speciálislehetőséget. Válassza Keresés Most. Válassza ki a felhasználói fiókot a listából. Válassza OKlehetőséget. 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:
Starting
Running
Stopping
Stopped
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
-hoz kötődik. 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ó
- HTTP.sys webkiszolgáló implementálása ASP.NET Core
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.
Jegyzet
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
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, amikor a CreateDefaultBuilder meghívásra kerül a gazdagép építése során.
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 kíséreljen meg GetCurrentDirectory erőforrás-elérési út beszerzésére, mert egy Windows Service-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.
Hibaelhárítás
A Windows szolgáltatás alkalmazás 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ás 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 nincs futó állapotban.
- 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 Log on as a service jogosultsággal.
- A felhasználó jelszava lejárt vagy helytelenül lett átadva a
New-Service
PowerShell-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.
Csomag gyorsítótárak törlése
A működő alkalmazások azonnal meghiúsulhatnak, miután frissítették a .NET Core SDK-t a fejlesztői gépen, vagy módosították az alkalmazás csomagverzióit. 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 bin és a obj mappákat.
Törölje a csomaggyorsítótárakat a következő parancs befuttatásával a parancshéjban: dotnet nuget locals all --clear.
A csomaggyorsítótárak törlése az nuget.exe eszközzel és a parancs
nuget locals all -clear
végrehajtásával is elvégezhető. nuget.exe nem része a csomagban telepített Windows asztali operációs rendszernek, é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 összeomlási memóriakép 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 lassú alkalmazásának okát.
Az alkalmazás összeomlik vagy kivételt tapasztal
Memóriakép vagy kivonat beszerzése és elemzése a Windows hibajelentési (WER):
Hozzon létre egy mappát a crash dump fájlok tárolására
c:\dumps
-nál.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás futtatható fájlnevével:
.\EnableDumps {APPLICATION EXE} c:\dumps
Futtassa az alkalmazást az összeomlást okozó feltételek mellett.
Az összeomlás után futtassa a DisableDumps PowerShell-szkriptet:
.\DisableDumps {APPLICATION EXE}
Az alkalmazás összeomlása és a hibaelhárítási adatok gyűjtése után az alkalmazás normál módon leállhat. A PowerShell-szkript úgy konfigurálja a WER-t, hogy alkalmazásonként legfeljebb öt memóriaképet gyűjtsön.
Figyelmeztetés
Az összeomlási memóriaképek nagy mennyiségű lemezterületet (egyenként akár több gigabájtot) is igénybe vehetnek.
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áskor meghibásodik, vagy normál módon fut, lásd User-Mode Memóriaképfájlok: A legjobb eszköz kiválasztása a memóriakép létrehozásához megfelelő eszköz kiválasztása érdekében.
A dömping elemzése
Egy kiíratás többféle megközelítéssel is elemezhető. További információért lásd: User-Mode memóriaképfájl elemzése.
További erőforrások
- Kestrel végpontkonfigurációs (beleértve a HTTPS-konfigurációt és az SNI-támogatást)
- .NET általános hoszt 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)
Előfeltételek
Munka 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 Core-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 ki a Munkás szolgáltatást. Válassza Következőlehetőséget.
- Adjon meg egy projektnevet a Projektnév mezőben, vagy fogadja el az alapértelmezett projektnevet. Válassza létrehozása lehetőséget.
- 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ívjuk meg. Ha az alkalmazás Windows-szolgáltatásként fut, a módszer:
- A gazdagép élettartamát
WindowsServiceLifetime
értékre állítja. - Beállítja a tartalomgyökér a(z) AppContext.BaseDirectoryértékre. További részletekért lásd a(z) Aktuális könyvtár és tartalomgyökér szakaszt.
- 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 a
CreateDefaultBuilder
függvényt hívja meg a gazdagép létrehozásához. - Az alapértelmezett naplószint felülbírálása a
Logging:EventLog:LogLevel:Default
kulccsal történik aappsettings.json
/appsettings.{Environment}.json
vagy más konfigurációszolgáltatókban. - 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) Program.cs
CreateHostBuilder
-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, és magában foglal üzemeltetett szolgáltatásokat háttérfeladatok ellátásához.
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ácsokért tekintse meg .NET Core-alkalmazások üzembe helyezési.
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 Core megosztott rendszerszintű verziójának jelenlétére támaszkodik a célrendszeren. Amikor az FDD forgatókönyvet a jelen cikkben ismertetett útmutatás szerint alkalmazzák, az SDK egy keretrendszerfüggő végrehajtható fájlt hoz létre (.exe), amelyet -nak hívnak.
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 true
értékre.
<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 cél keretrendszert tartalmazó <PropertyGroup>
tartalmaz egy Windows futtatókörnyezet-azonosító (RID):
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
Több RID-hez való közzététel:
- Adja meg a RIDs-t pontosvesszővel elválasztott listában.
- Használja a <RuntimeIdentifiers> (többes szám) tulajdonságnevet.
További információ: .NET Core 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 dátummal (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.
Bejelentkezés szolgáltatási jogosultságként
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 a Helyi házirendek csomópontot, és válassza Felhasználói jogok hozzárendeléselehetőséget.
- Nyissa meg a Szolgáltatásként való bejelentkezés házirendet.
- Válassza Felhasználó vagy csoport hozzáadása.
- 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 Speciális. Válassza a Keresés mostopciót. Válassza ki a felhasználói fiókot a listából. Válassza OKlehetőséget. 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:
Starting
Running
Stopping
Stopped
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
-re kötődik. 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ó
- HTTP.sys webkiszolgáló implementálása ASP.NET Core
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.
Jegyzet
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-t az AppContext.BaseDirectory .
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 kíséreljen meg GetCurrentDirectory erőforrás-elérési út beszerzésére, mert egy Windows Service-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.
Hibaelhárítás
A Windows szolgáltatás alkalmazás hibaelhárításához lásd: Az ASP.NET Core projektek hibaelhárítása.
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 az alkalmazás 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 működő á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-Service
PowerShell-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 a(z) Rendszer lehetőséget a Rendszer eseménynapló 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-ek törlése
A működő alkalmazások azonnal meghiúsulhatnak, miután frissítették a .NET Core SDK-t a fejlesztői gépen, vagy módosították az alkalmazás csomagverzióit. 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 bin és obj mappákat.
Törölje a csomaggyorsítótárakat a dotnet nuget locals all --clear parancs végrehajtásával a parancshéjból.
A csomaggyorsítótárak törlése az nuget.exe eszközzel és a parancs
nuget locals all -clear
végrehajtásával is elvégezhető. nuget.exe nem tartozik a Windows asztali operációs rendszerhez, 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 összeomlási memóriakép a rendszer memóriájának pillanatképe, amely segít meghatározni az alkalmazás összeomlásának, indítási problémájának vagy lassú alkalmazás működésének okát.
Az alkalmazás összeomlik vagy kivételt tapasztal
Memóriakép beszerzése és elemzése Windows hibajelentési (WER):
Hozzon létre egy mappát az összeomlási memóriaképfájlok tárolásához a
c:\dumps
.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás futtatható fájlnevével:
.\EnableDumps {APPLICATION EXE} c:\dumps
Futtassa az alkalmazást az összeomlást okozó feltételek mellett.
Az összeomlás után futtassa a DisableDumps PowerShell-szkriptet:
.\DisableDumps {APPLICATION EXE}
Egy alkalmazás összeomlása és az adatok gyűjtésének befejeződésekor az alkalmazás normál módon leállhat. A PowerShell-szkript úgy állítja be a WER-t, hogy alkalmazásonként legfeljebb öt memóriaképet gyűjtsön.
Figyelmeztetés
Az összeomlási memóriaképek nagy mennyiségű lemezterületet (egyenként akár több gigabájtot) is igénybe vehetnek.
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, sikertelen az indítás vagy normálisan 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ához megfelelő eszköz kiválasztásához.
A dump elemzése
Egy adatdump több megközelítéssel is elemezhető. További információért lásd: A User-Mode memóriaképfájl elemzése.
További erőforrások
- Kestrel végpontkonfigurációs (beleértve a HTTPS-konfigurációt és az SNI-támogatást)
- .NET Általános gazdagép ASP.NET Core
- 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)
Előfeltételek
Dolgozói 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 Core-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áselemet. 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 létrehozása lehetőséget.
- 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(z) tartalomgyökér beállítása a(z) értékre az AppContext.BaseDirectory-ban. További információkért lásd a(z) Aktuális könyvtár és tartalomgyökér szakaszt.
- 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és vagy magasabb egy ASP.NET Core-sablonra épülő alkalmazás esetében, amely meghívja a
CreateDefaultBuilder
a gazdagép felépítéséhez. - Az alapértelmezett naplószintet a
Logging:EventLog:LogLevel:Default
kulccsal felülbírálhatod aappsettings.json
/appsettings.{Environment}.json
vagy más konfigurációszolgáltatók használatával. - 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
CreateHostBuilder
:
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: Egy Razor Pages webalkalmazás minta, amely Windows-szolgáltatásként fut, és által üzemeltetett szolgáltatásokkal rendelkezik 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ácsokért tekintse meg .NET Core-alkalmazások üzembe helyezési.
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 Core megosztott rendszerszintű verziójának jelenlétére támaszkodik a célrendszeren. Amikor a jelen cikkben ismertetett útmutatást követve elfogadják az FDD-forgatókönyvet, az SDK létrehoz egy (.exe) nevű, keretrendszerfüggő végrehajtható fájlt.
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 állítsa be a <IsTransformWebConfigDisabled>
tulajdonságot a true
értékre.
<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 cél keretrendszert tartalmazó <PropertyGroup>
tartalmaz egy Windows futtatókörnyezet-azonosító (RID):
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
Több RID-hez történő közzététel:
- Adja meg az RIDs azonosítókat pontosvesszővel tagolt listában.
- Használja a <RuntimeIdentifiers> (többes szám) tulajdonságnevet.
További információ: .NET Core 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.
Bejelentkezés szolgáltatásjogokkal
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 a Helyi házirendek csomópontot, és válassza Felhasználói jogok hozzárendeléselehetőséget.
- Nyissa meg a Szolgáltatásként való bejelentkezés szabályzatot.
- Válassza Felhasználó vagy csoport hozzáadása.
- 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 Speciális. Válassza Kereséslehetőséget. Válassza ki a felhasználói fiókot a listából. Válassza OKlehetőséget. 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:
Starting
Running
Stopping
Stopped
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(z) http://localhost:5000
-hoz kapcsolódik. 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:
- Kestrel webkiszolgáló az ASP.NET Core
- HTTP.sys webkiszolgáló megvalósítása az ASP.NET Core alkalmazásával
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.
Jegyzet
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, UseWindowsService beállítja a ContentRootPath-t az AppContext.BaseDirectory .
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 a CreateDefaultBuilder meghívásával a gazdagép felépítése során.
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 kíséreljen meg GetCurrentDirectory erőforrás-elérési út beszerzésére, mert egy Windows Service-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.
Hibaelhárítás
Windows szolgáltatás alkalmazá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 az 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és jogosultsággal.
- A felhasználó jelszava lejárt vagy helytelenül lett átadva a
New-Service
PowerShell-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 a Rendszer lehetőséget a rendszer eseménynaplójának 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.
A csomag gyorsítótárának törlése
A működő alkalmazások azonnal meghiúsulhatnak, miután frissítették a .NET Core SDK-t a fejlesztői gépen, vagy módosították az alkalmazás csomagverzióit. 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 bin és obj mappákat.
Törölje a csomaggyorsítótárakat úgy, hogy a parancshéjban futtatja a dotnet nuget locals all --clear parancsot.
A csomaggyorsítótárak törlése az nuget.exe eszközzel és a parancs
nuget locals all -clear
végrehajtásával is elvégezhető. nuget.exe nincs csomagként telepítve 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ória-adatmentés a rendszer memóriájának egy pillanatképe, ami segít meghatározni, mi okozta az alkalmazás összeomlását, az indítási hibát vagy a lassú működést.
Az alkalmazás összeomlik vagy kivételt tapasztal
Hibamemória beszerzése és elemzése a Windows hibajelentési (WER)alapján:
Hozzon létre egy mappát a memóriaösszeomlás fájljainak tárolására a
c:\dumps
.Futtassa az EnableDumps PowerShell-szkriptet az alkalmazás végrehajtható állományának nevével:
.\EnableDumps {APPLICATION EXE} c:\dumps
Futtassa az alkalmazást azok között a feltételek között, amelyek az összeomlást okozzák.
Az összeomlás után futtassa a DisableDumps PowerShell-szkriptet:
.\DisableDumps {APPLICATION EXE}
Az alkalmazás összeomlása és a memóriakép-gyűjtemény befejeződése után az alkalmazás normál módon leállhat. A PowerShell-szkript úgy konfigurálja a WER-t, hogy alkalmazásonként legfeljebb öt memóriaképet gyűjtsön.
Figyelmeztetés
Az összeomlási memóriaképek sok lemezterületet foglalhatnak (egyenként akár több gigabájtot).
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 összeomlik, az indítás során meghiúsul, vagy normál módon fut, olvassa el User-Mode Memóriaképfájlok: A legjobb eszköz kiválasztása a memóriakép létrehozásához megfelelő eszköz kiválasztásához.
A dömping elemzése
A mentés több megközelítéssel is elemezhető. További információ: User-Mode memóriaképfájl-elemzése.
További erőforrások
- Kestrel végpontkonfigurációs (beleértve a HTTPS-konfigurációt és az SNI-támogatást)
- .NET Generikus gazdagép az ASP.NET Core-ban
- Alapvető projektek ASP.NET hibaelhárítása és hibakeresése