トレーニング
モジュール
App Service 診断を使用した Web App Down シナリオのトラブルシューティング - Training
Web App Down、Crash Monitoring、および Ask Genie を利用してトラブルシューティングを行います。 これらのツールを使用して、アプリケーションとプラットフォームの可用性を監視し、未処理の例外を識別し、メモリ ダンプと呼び出し履歴をキャプチャし、調査と診断の領域を見つけます。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
注意
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
ASP.NET Core アプリは、IIS を 使用せずに、Windows サービスとして Windows にホストできます。 Windows サービスとしてホストされている場合、サーバーの再起動後にアプリが自動的に起動します。
ASP.NET Core ワーカー サービス テンプレートは、実行時間が長いサービス アプリを作成する場合の出発点として利用できます。 テンプレートを Windows サービス アプリの基礎として使用するには:
Program.csを更新して、AddWindowsServiceを呼び出します。 アプリが Windows サービスとして実行している場合は、AddWindowsService
:
WindowsServiceLifetime
に設定します。CreateDefaultBuilder
" 以上です。Logging:EventLog:LogLevel:Default
appsettings.json
/ の appsettings.{Environment}.json
キーまたは他の構成プロバイダーでオーバーライドします。次の ServiceA
クラスがあるとします。
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.");
}
}
次の Program.cs
は、AddHostedService
を登録するために 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();
このトピックには、次のサンプル アプリが付属しています。
MVC のガイダンスについては、「ASP.NET Core MVC の概要」および「ASP.NET Core 2.2 から 3.0 への移行」にある記事を参照してください。
展開のシナリオに関する情報および注意事項については、「.NET Core アプリケーションの展開」をご覧ください。
Razor Pages または MVC フレームワークを使用する Web アプリ ベースのサービスでは、プロジェクト ファイルに Web SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Web">
サービスでバックグラウンド タスク (ホステッド サービスなど) のみを実行する場合は、プロジェクト ファイルにワーカー SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Worker">
フレームワーク依存型展開 (FDD) は、ターゲット システムに .NET Core のシステム全体の共有バージョンが存在することに依存します。 この記事のガイダンスに従って、FDD シナリオを採用すると、フレームワーク依存型実行可能ファイル と呼ばれる実行可能ファイル ( .exe) が SDK によって生成されます。
Web SDK を使用している場合、web.config ファイル (通常 ASP.NET Core アプリを発行する際に生成されます) は、Windows サービス アプリに対しては必要ありません。 web.config ファイルの作成を無効にするには、<IsTransformWebConfigDisabled>
に設定した true
プロパティを追加します。
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
自己完結型の展開 (SCD) は、ホスト システムに共有フレームワークが存在することに依存しません。 ランタイムとアプリの依存関係が、アプリと共に展開されます。
Windows ランタイム識別子 (RID) は、ターゲット フレームワークを格納する <PropertyGroup>
に含まれます。
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
複数の RID を発行するには、次の処理を実行します。
詳細については、「.NET Core の RID カタログ」を参照してください。
サービス用のユーザー アカウントを作成するには、PowerShell 6 の管理コマンド シェルから New-LocalUser コマンドレットを使用します。
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以降:
New-LocalUser -Name {SERVICE NAME}
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以前の Windows OS:
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
入力を求められたら、強力なパスワードを指定します。
-AccountExpires
コマンドレットに という有効期限で DateTime パラメーターを指定しない場合、アカウントは期限切れになりません。
詳しくは、「Microsoft.PowerShell.LocalAccounts」および「Service User Accounts (サービス ユーザー アカウント)」をご覧ください。
Active Directory を使う場合、ユーザーを管理するための別の方法は、マネージド サービス アカウントを使うことです。 詳細については、「Group Managed Service Accounts Overview (グループ マネージド サービス アカウントの概要)」をご覧ください。
サービス ユーザー アカウントにサービスとしてログオン権利を確立するには、次の処理を実行します。
{DOMAIN OR COMPUTER NAME\USER}
) を入力し、 [OK] を選択して、ポリシーにユーザーを追加します。PowerShell コマンドを使用して、サービスを登録します。 PowerShell 6 の管理コマンド シェルから次のコマンドを実行します。
$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}
: ホスト上のアプリの実行可能ファイルのパス (たとえば、d:\myservice
)。 このパスに、アプリの実行可能ファイル名は含めないでください。 末尾のスラッシュは、必要ありません。{DOMAIN OR COMPUTER NAME\USER}
:サービスのユーザー アカウント (Contoso\ServiceUser
など)。{SERVICE NAME}
:サービス名 (MyService
など)。{EXE FILE PATH}
: アプリの実行可能ファイルの完全なパス (d:\myservice\myservice.exe
など)。 拡張子付きの実行可能ファイルのファイル名を含めます。{EXE FOLDER PATH}
: アプリの実行可能ファイルの完全なフォルダー パス (d:\myservice
など)。{DESCRIPTION}
:サービスの説明 (My sample service
など)。{DISPLAY NAME}
:サービスの表示名 (My Service
など)。次の PowerShell 6 コマンドでサービスを開始します。
Start-Service -Name {SERVICE NAME}
このコマンドでサービスを開始するには数秒かかります。
サービスの状態を確認するには、次の PowerShell 6 コマンドを使います。
Get-Service -Name {SERVICE NAME}
この状態は、次のいずれかの値として報告されます。
Starting
Running
Stopping
Stopped
次の PowerShell 6 コマンドでサービスを停止します。
Stop-Service -Name {SERVICE NAME}
サービスを停止した後、少ししてから、次の PowerShell 6 コマンドを使ってサービスを削除します。
Remove-Service -Name {SERVICE NAME}
インターネットまたは企業ネットワークからの要求とやり取りするサービスやプロキシまたはロード バランサーの背後にあるサービスでは、追加の構成が必要になる場合があります。 詳細については、「プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する」を参照してください。
既定では、ASP.NET Core は http://localhost:5000
にバインドされます。 ASPNETCORE_URLS
環境変数を設定して、URL とポートを構成します。
追加の URL とポートの構成方法については、関連するサーバーの記事を参照してください。
上記のガイダンスでは、HTTPS エンドポイントのサポートについて説明しています。 たとえば、Windows サービスで認証が使用されている場合は、アプリを HTTPS 用に構成します。
注意
サービス エンドポイントをセキュリティで保護するために ASP.NET Core の HTTPS 開発証明書を使用することはできません。
Windows サービスに対して GetCurrentDirectory を呼び出して返される現在の作業ディレクトリは C:\WINDOWS\system32 フォルダーです。 system32 フォルダーは、サービスのファイル (設定ファイルなど) を保存するために適した場所ではありません。 次のいずれかの方法を使用して、サービスのアセットと設定ファイルを管理し、アクセスします。
IHostEnvironment.ContentRootPath または ContentRootFileProvider を使用して、アプリのリソースを見つけます。
アプリがサービスとして実行されると、UseWindowsService によって ContentRootPath が AppContext.BaseDirectory に設定されます。
アプリの既定の設定ファイルである appsettings.json
と appsettings.{Environment}.json
は、ホストの構築中に CreateDefaultBuilder を呼び出すことで、アプリのコンテンツ ルートから読み込まれます。
ConfigureAppConfiguration の開発者コードによって読み込まれた他の設定ファイルについては、SetBasePath を呼び出す必要はありません。 次の例では、custom_settings.json
ファイルはアプリのコンテンツ ルートに存在しており、明示的にベース パスを設定しなくても読み込まれます。
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>();
});
}
Windows サービス アプリから現在のディレクトリとして GetCurrentDirectory フォルダーが返されるため、 を使用してリソース パスを取得しないでください。
ファイルを含むフォルダーに対して SetBasePath を使用するときは、IConfigurationBuilder を使用して絶対パスを指定します。
Windows サービス アプリのトラブルシューティングについては、「ASP.NET Core プロジェクトのトラブルシューティングとデバッグ」を参照してください。
New-Service
PowerShell コマンドの実行時に、ユーザーのパスワードの有効期限が切れていたか、正しく渡されていません。システム イベント ログとアプリケーション イベント ログにアクセスします。
多くのスタートアップ エラーでは、イベント ログに有用な情報が生成されません。 ホスティング システムのコマンド プロンプトでアプリを実行すると、エラーの原因がわかることがあります。 アプリからさらに詳細情報をログに記録するには、ログ レベルを低くするか、開発環境でアプリを実行します。
開発マシンで .NET Core SDK をアップグレードしたり、アプリ内のパッケージ バージョンを変更したりした直後に、機能しているアプリが失敗することがあります。 場合によっては、パッケージに統一性がないと、メジャー アップグレード実行時にアプリが破壊されることがあります。 これらの問題のほとんどは、次の手順で解決できます。
bin フォルダーと obj フォルダーを削除します。
コマンド シェルから dotnet nuget locals all --clear を実行して、パッケージ キャッシュをクリアします。
パッケージ キャッシュをクリアするには、nuget.exe ツールを使用して nuget locals all -clear
コマンドを実行する方法もあります。 nuget.exe は、Windows デスクトップ オペレーティング システムにバンドルされているインストールではなく、NuGet Web サイトから別に入手する必要があります。
プロジェクトを復元してリビルドします。
アプリを再展開する前に、サーバー上の展開フォルダー内のすべてのファイルを削除します。
"クラッシュ ダンプ" とはシステムのメモリのスナップショットであり、アプリのクラッシュ、起動の失敗、遅いアプリの原因を突き止めるのに役立ちます。
Windows エラー報告 (WER) からダンプを取得して分析します。
c:\dumps
にクラッシュ ダンプ ファイルを保持するフォルダーを作成します。
次のアプリケーションの実行可能ファイル名で EnableDumps PowerShell スクリプトを実行します。
.\EnableDumps {APPLICATION EXE} c:\dumps
クラッシュが発生する条件の下でアプリを実行します。
クラッシュが発生した後、DisableDumps PowerShell スクリプトを実行します。
.\DisableDumps {APPLICATION EXE}
アプリがクラッシュし、ダンプの収集が完了したら、アプリを普通に終了してかまいません。 PowerShell スクリプトにより、アプリごとに最大 5 つのダンプを収集する WER が構成されます。
警告
クラッシュ ダンプでは、大量のディスク領域 (1 つにつき最大、数ギガバイト) が使用される場合があります。
アプリが起動時または正常な実行中に応答を停止するがクラッシュしない、または失敗するときは、「ユーザーモード ダンプ ファイル: 最適なツールの選択」を参照し、適切なツールを選択してダンプを生成します。
ダンプはいくつかの方法で分析できます。 詳細については、「Analyzing a User-Mode Dump File」(ユーザー モード ダンプ ファイルの分析) を参照してください。
ASP.NET Core アプリは、IIS を 使用せずに、Windows サービスとして Windows にホストできます。 Windows サービスとしてホストされている場合、サーバーの再起動後にアプリが自動的に起動します。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
ASP.NET Core ワーカー サービス テンプレートは、実行時間が長いサービス アプリを作成する場合の出発点として利用できます。 テンプレートを Windows サービス アプリの基礎として使用するには:
アプリには、Microsoft.Extensions.Hosting.WindowsServicesのパッケージ参照が必要です。
ホストのビルド時に IHostBuilder.UseWindowsService
が呼び出されます。 アプリが Windows サービスとして実行している場合、メソッドは
WindowsServiceLifetime
に設定します。CreateDefaultBuilder
" 以上です。Logging:EventLog:LogLevel:Default
appsettings.json
/ の appsettings.{Environment}.json
キーまたは他の構成プロバイダーでオーバーライドします。Program.cs
の場合:
ContentRootPath
を設定します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();
このトピックには、次のサンプル アプリが付属しています。
MVC のガイダンスについては、「ASP.NET Core MVC の概要」および「ASP.NET Core 2.2 から 3.0 への移行」にある記事を参照してください。
展開のシナリオに関する情報および注意事項については、「.NET Core アプリケーションの展開」をご覧ください。
Razor Pages または MVC フレームワークを使用する Web アプリ ベースのサービスでは、プロジェクト ファイルに Web SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Web">
サービスでバックグラウンド タスク (ホステッド サービスなど) のみを実行する場合は、プロジェクト ファイルにワーカー SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Worker">
フレームワーク依存型展開 (FDD) は、ターゲット システムに .NET Core のシステム全体の共有バージョンが存在することに依存します。 この記事のガイダンスに従って、FDD シナリオを採用すると、フレームワーク依存型実行可能ファイル と呼ばれる実行可能ファイル ( .exe) が SDK によって生成されます。
Web SDK を使用している場合、web.config ファイル (通常 ASP.NET Core アプリを発行する際に生成されます) は、Windows サービス アプリに対しては必要ありません。 web.config ファイルの作成を無効にするには、<IsTransformWebConfigDisabled>
に設定した true
プロパティを追加します。
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
自己完結型の展開 (SCD) は、ホスト システムに共有フレームワークが存在することに依存しません。 ランタイムとアプリの依存関係が、アプリと共に展開されます。
Windows ランタイム識別子 (RID) は、ターゲット フレームワークを格納する <PropertyGroup>
に含まれます。
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
複数の RID を発行するには、次の処理を実行します。
詳細については、「.NET Core の RID カタログ」を参照してください。
サービス用のユーザー アカウントを作成するには、PowerShell 6 の管理コマンド シェルから New-LocalUser コマンドレットを使用します。
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以降:
New-LocalUser -Name {SERVICE NAME}
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以前の Windows OS:
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
入力を求められたら、強力なパスワードを指定します。
-AccountExpires
コマンドレットに という有効期限で DateTime パラメーターを指定しない場合、アカウントは期限切れになりません。
詳しくは、「Microsoft.PowerShell.LocalAccounts」および「Service User Accounts (サービス ユーザー アカウント)」をご覧ください。
Active Directory を使う場合、ユーザーを管理するための別の方法は、マネージド サービス アカウントを使うことです。 詳細については、「Group Managed Service Accounts Overview (グループ マネージド サービス アカウントの概要)」をご覧ください。
サービス ユーザー アカウントにサービスとしてログオン権利を確立するには、次の処理を実行します。
{DOMAIN OR COMPUTER NAME\USER}
) を入力し、 [OK] を選択して、ポリシーにユーザーを追加します。PowerShell コマンドを使用して、サービスを登録します。 PowerShell 6 の管理コマンド シェルから次のコマンドを実行します。
$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}
: ホスト上のアプリの実行可能ファイルのパス (たとえば、d:\myservice
)。 このパスに、アプリの実行可能ファイル名は含めないでください。 末尾のスラッシュは、必要ありません。{DOMAIN OR COMPUTER NAME\USER}
:サービスのユーザー アカウント (Contoso\ServiceUser
など)。{SERVICE NAME}
:サービス名 (MyService
など)。{EXE FILE PATH}
: アプリの実行可能ファイルの完全なパス (d:\myservice\myservice.exe
など)。 拡張子付きの実行可能ファイルのファイル名を含めます。{EXE FOLDER PATH}
: アプリの実行可能ファイルの完全なフォルダー パス (d:\myservice
など)。{DESCRIPTION}
:サービスの説明 (My sample service
など)。{DISPLAY NAME}
:サービスの表示名 (My Service
など)。次の PowerShell 6 コマンドでサービスを開始します。
Start-Service -Name {SERVICE NAME}
このコマンドでサービスを開始するには数秒かかります。
サービスの状態を確認するには、次の PowerShell 6 コマンドを使います。
Get-Service -Name {SERVICE NAME}
この状態は、次のいずれかの値として報告されます。
Starting
Running
Stopping
Stopped
次の PowerShell 6 コマンドでサービスを停止します。
Stop-Service -Name {SERVICE NAME}
サービスを停止した後、少ししてから、次の PowerShell 6 コマンドを使ってサービスを削除します。
Remove-Service -Name {SERVICE NAME}
インターネットまたは企業ネットワークからの要求とやり取りするサービスやプロキシまたはロード バランサーの背後にあるサービスでは、追加の構成が必要になる場合があります。 詳細については、「プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する」を参照してください。
既定では、ASP.NET Core は http://localhost:5000
にバインドされます。 ASPNETCORE_URLS
環境変数を設定して、URL とポートを構成します。
追加の URL とポートの構成方法については、関連するサーバーの記事を参照してください。
上記のガイダンスでは、HTTPS エンドポイントのサポートについて説明しています。 たとえば、Windows サービスで認証が使用されている場合は、アプリを HTTPS 用に構成します。
注意
サービス エンドポイントをセキュリティで保護するために ASP.NET Core の HTTPS 開発証明書を使用することはできません。
Windows サービスに対して GetCurrentDirectory を呼び出して返される現在の作業ディレクトリは C:\WINDOWS\system32 フォルダーです。 system32 フォルダーは、サービスのファイル (設定ファイルなど) を保存するために適した場所ではありません。 次のいずれかの方法を使用して、サービスのアセットと設定ファイルを管理し、アクセスします。
IHostEnvironment.ContentRootPath または ContentRootFileProvider を使用して、アプリのリソースを見つけます。
アプリがサービスとして実行されると、UseWindowsService によって ContentRootPath が AppContext.BaseDirectory に設定されます。
アプリの既定の設定ファイルである appsettings.json
と appsettings.{Environment}.json
は、ホストの構築中に CreateDefaultBuilder を呼び出すことで、アプリのコンテンツ ルートから読み込まれます。
ConfigureAppConfiguration の開発者コードによって読み込まれた他の設定ファイルについては、SetBasePath を呼び出す必要はありません。 次の例では、custom_settings.json
ファイルはアプリのコンテンツ ルートに存在しており、明示的にベース パスを設定しなくても読み込まれます。
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>();
});
}
Windows サービス アプリから現在のディレクトリとして GetCurrentDirectory フォルダーが返されるため、 を使用してリソース パスを取得しないでください。
ファイルを含むフォルダーに対して SetBasePath を使用するときは、IConfigurationBuilder を使用して絶対パスを指定します。
Windows サービス アプリのトラブルシューティングについては、「ASP.NET Core プロジェクトのトラブルシューティングとデバッグ」を参照してください。
New-Service
PowerShell コマンドの実行時に、ユーザーのパスワードの有効期限が切れていたか、正しく渡されていません。システム イベント ログとアプリケーション イベント ログにアクセスします。
多くのスタートアップ エラーでは、イベント ログに有用な情報が生成されません。 ホスティング システムのコマンド プロンプトでアプリを実行すると、エラーの原因がわかることがあります。 アプリからさらに詳細情報をログに記録するには、ログ レベルを低くするか、開発環境でアプリを実行します。
開発マシンで .NET Core SDK をアップグレードしたり、アプリ内のパッケージ バージョンを変更したりした直後に、機能しているアプリが失敗することがあります。 場合によっては、パッケージに統一性がないと、メジャー アップグレード実行時にアプリが破壊されることがあります。 これらの問題のほとんどは、次の手順で解決できます。
bin フォルダーと obj フォルダーを削除します。
コマンド シェルから dotnet nuget locals all --clear を実行して、パッケージ キャッシュをクリアします。
パッケージ キャッシュをクリアするには、nuget.exe ツールを使用して nuget locals all -clear
コマンドを実行する方法もあります。 nuget.exe は、Windows デスクトップ オペレーティング システムにバンドルされているインストールではなく、NuGet Web サイトから別に入手する必要があります。
プロジェクトを復元してリビルドします。
アプリを再展開する前に、サーバー上の展開フォルダー内のすべてのファイルを削除します。
"クラッシュ ダンプ" とはシステムのメモリのスナップショットであり、アプリのクラッシュ、起動の失敗、遅いアプリの原因を突き止めるのに役立ちます。
Windows エラー報告 (WER) からダンプを取得して分析します。
c:\dumps
にクラッシュ ダンプ ファイルを保持するフォルダーを作成します。
次のアプリケーションの実行可能ファイル名で EnableDumps PowerShell スクリプトを実行します。
.\EnableDumps {APPLICATION EXE} c:\dumps
クラッシュが発生する条件の下でアプリを実行します。
クラッシュが発生した後、DisableDumps PowerShell スクリプトを実行します。
.\DisableDumps {APPLICATION EXE}
アプリがクラッシュし、ダンプの収集が完了したら、アプリを普通に終了してかまいません。 PowerShell スクリプトにより、アプリごとに最大 5 つのダンプを収集する WER が構成されます。
警告
クラッシュ ダンプでは、大量のディスク領域 (1 つにつき最大、数ギガバイト) が使用される場合があります。
アプリが起動時または正常な実行中に応答を停止するがクラッシュしない、または失敗するときは、「ユーザーモード ダンプ ファイル: 最適なツールの選択」を参照し、適切なツールを選択してダンプを生成します。
ダンプはいくつかの方法で分析できます。 詳細については、「Analyzing a User-Mode Dump File」(ユーザー モード ダンプ ファイルの分析) を参照してください。
ASP.NET Core アプリは、IIS を 使用せずに、Windows サービスとして Windows にホストできます。 Windows サービスとしてホストされている場合、サーバーの再起動後にアプリが自動的に起動します。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
ASP.NET Core ワーカー サービス テンプレートは、実行時間が長いサービス アプリを作成する場合の出発点として利用できます。 テンプレートを Windows サービス アプリの基礎として使用するには:
アプリには、Microsoft.Extensions.Hosting.WindowsServicesのパッケージ参照が必要です。
ホストのビルド時に IHostBuilder.UseWindowsService
が呼び出されます。 アプリが Windows サービスとして実行している場合、メソッドは
WindowsServiceLifetime
に設定します。CreateDefaultBuilder
" 以上です。Logging:EventLog:LogLevel:Default
appsettings.json
/ の appsettings.{Environment}.json
キーまたは他の構成プロバイダーでオーバーライドします。CreateHostBuilder
の Program.cs
で:
Host.CreateDefaultBuilder(args)
.UseWindowsService()
...
このトピックには、次のサンプル アプリが付属しています。
MVC のガイダンスについては、「ASP.NET Core MVC の概要」および「ASP.NET Core 2.2 から 3.0 への移行」にある記事を参照してください。
展開のシナリオに関する情報および注意事項については、「.NET Core アプリケーションの展開」をご覧ください。
Razor Pages または MVC フレームワークを使用する Web アプリ ベースのサービスでは、プロジェクト ファイルに Web SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Web">
サービスでバックグラウンド タスク (ホステッド サービスなど) のみを実行する場合は、プロジェクト ファイルにワーカー SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Worker">
フレームワーク依存型展開 (FDD) は、ターゲット システムに .NET Core のシステム全体の共有バージョンが存在することに依存します。 この記事のガイダンスに従って、FDD シナリオを採用すると、フレームワーク依存型実行可能ファイル と呼ばれる実行可能ファイル ( .exe) が SDK によって生成されます。
Web SDK を使用している場合、web.config ファイル (通常 ASP.NET Core アプリを発行する際に生成されます) は、Windows サービス アプリに対しては必要ありません。 web.config ファイルの作成を無効にするには、<IsTransformWebConfigDisabled>
に設定した true
プロパティを追加します。
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
自己完結型の展開 (SCD) は、ホスト システムに共有フレームワークが存在することに依存しません。 ランタイムとアプリの依存関係が、アプリと共に展開されます。
Windows ランタイム識別子 (RID) は、ターゲット フレームワークを格納する <PropertyGroup>
に含まれます。
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
複数の RID を発行するには、次の処理を実行します。
詳細については、「.NET Core の RID カタログ」を参照してください。
サービス用のユーザー アカウントを作成するには、PowerShell 6 の管理コマンド シェルから New-LocalUser コマンドレットを使用します。
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以降:
New-LocalUser -Name {SERVICE NAME}
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以前の Windows OS:
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
入力を求められたら、強力なパスワードを指定します。
-AccountExpires
コマンドレットに という有効期限で DateTime パラメーターを指定しない場合、アカウントは期限切れになりません。
詳しくは、「Microsoft.PowerShell.LocalAccounts」および「Service User Accounts (サービス ユーザー アカウント)」をご覧ください。
Active Directory を使う場合、ユーザーを管理するための別の方法は、マネージド サービス アカウントを使うことです。 詳細については、「Group Managed Service Accounts Overview (グループ マネージド サービス アカウントの概要)」をご覧ください。
サービス ユーザー アカウントにサービスとしてログオン権利を確立するには、次の処理を実行します。
{DOMAIN OR COMPUTER NAME\USER}
) を入力し、 [OK] を選択して、ポリシーにユーザーを追加します。PowerShell コマンドを使用して、サービスを登録します。 PowerShell 6 の管理コマンド シェルから次のコマンドを実行します。
$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}
: ホスト上のアプリの実行可能ファイルのパス (たとえば、d:\myservice
)。 このパスに、アプリの実行可能ファイル名は含めないでください。 末尾のスラッシュは、必要ありません。{DOMAIN OR COMPUTER NAME\USER}
:サービスのユーザー アカウント (Contoso\ServiceUser
など)。{SERVICE NAME}
:サービス名 (MyService
など)。{EXE FILE PATH}
: アプリの実行可能ファイルの完全なパス (d:\myservice\myservice.exe
など)。 拡張子付きの実行可能ファイルのファイル名を含めます。{DESCRIPTION}
:サービスの説明 (My sample service
など)。{DISPLAY NAME}
:サービスの表示名 (My Service
など)。次の PowerShell 6 コマンドでサービスを開始します。
Start-Service -Name {SERVICE NAME}
このコマンドでサービスを開始するには数秒かかります。
サービスの状態を確認するには、次の PowerShell 6 コマンドを使います。
Get-Service -Name {SERVICE NAME}
この状態は、次のいずれかの値として報告されます。
Starting
Running
Stopping
Stopped
次の PowerShell 6 コマンドでサービスを停止します。
Stop-Service -Name {SERVICE NAME}
サービスを停止した後、少ししてから、次の PowerShell 6 コマンドを使ってサービスを削除します。
Remove-Service -Name {SERVICE NAME}
インターネットまたは企業ネットワークからの要求とやり取りするサービスやプロキシまたはロード バランサーの背後にあるサービスでは、追加の構成が必要になる場合があります。 詳細については、「プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する」を参照してください。
既定では、ASP.NET Core は http://localhost:5000
にバインドされます。 ASPNETCORE_URLS
環境変数を設定して、URL とポートを構成します。
追加の URL とポートの構成方法については、関連するサーバーの記事を参照してください。
上記のガイダンスでは、HTTPS エンドポイントのサポートについて説明しています。 たとえば、Windows サービスで認証が使用されている場合は、アプリを HTTPS 用に構成します。
注意
サービス エンドポイントをセキュリティで保護するために ASP.NET Core の HTTPS 開発証明書を使用することはできません。
Windows サービスに対して GetCurrentDirectory を呼び出して返される現在の作業ディレクトリは C:\WINDOWS\system32 フォルダーです。 system32 フォルダーは、サービスのファイル (設定ファイルなど) を保存するために適した場所ではありません。 次のいずれかの方法を使用して、サービスのアセットと設定ファイルを管理し、アクセスします。
IHostEnvironment.ContentRootPath または ContentRootFileProvider を使用して、アプリのリソースを見つけます。
アプリがサービスとして実行されると、UseWindowsService によって ContentRootPath が AppContext.BaseDirectory に設定されます。
アプリの既定の設定ファイルである appsettings.json
と appsettings.{Environment}.json
は、ホストの構築中に CreateDefaultBuilder を呼び出すことで、アプリのコンテンツ ルートから読み込まれます。
ConfigureAppConfiguration の開発者コードによって読み込まれた他の設定ファイルについては、SetBasePath を呼び出す必要はありません。 次の例では、custom_settings.json
ファイルはアプリのコンテンツ ルートに存在しており、明示的にベース パスを設定しなくても読み込まれます。
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>();
});
}
Windows サービス アプリから現在のディレクトリとして GetCurrentDirectory フォルダーが返されるため、 を使用してリソース パスを取得しないでください。
ファイルを含むフォルダーに対して SetBasePath を使用するときは、IConfigurationBuilder を使用して絶対パスを指定します。
Windows サービス アプリのトラブルシューティングについては、「ASP.NET Core プロジェクトのトラブルシューティングとデバッグ」を参照してください。
New-Service
PowerShell コマンドの実行時に、ユーザーのパスワードの有効期限が切れていたか、正しく渡されていません。システム イベント ログとアプリケーション イベント ログにアクセスします。
多くのスタートアップ エラーでは、イベント ログに有用な情報が生成されません。 ホスティング システムのコマンド プロンプトでアプリを実行すると、エラーの原因がわかることがあります。 アプリからさらに詳細情報をログに記録するには、ログ レベルを低くするか、開発環境でアプリを実行します。
開発マシンで .NET Core SDK をアップグレードしたり、アプリ内のパッケージ バージョンを変更したりした直後に、機能しているアプリが失敗することがあります。 場合によっては、パッケージに統一性がないと、メジャー アップグレード実行時にアプリが破壊されることがあります。 これらの問題のほとんどは、次の手順で解決できます。
bin フォルダーと obj フォルダーを削除します。
コマンド シェルから dotnet nuget locals all --clear を実行して、パッケージ キャッシュをクリアします。
パッケージ キャッシュをクリアするには、nuget.exe ツールを使用して nuget locals all -clear
コマンドを実行する方法もあります。 nuget.exe は、Windows デスクトップ オペレーティング システムにバンドルされているインストールではなく、NuGet Web サイトから別に入手する必要があります。
プロジェクトを復元してリビルドします。
アプリを再展開する前に、サーバー上の展開フォルダー内のすべてのファイルを削除します。
"クラッシュ ダンプ" とはシステムのメモリのスナップショットであり、アプリのクラッシュ、起動の失敗、遅いアプリの原因を突き止めるのに役立ちます。
Windows エラー報告 (WER) からダンプを取得して分析します。
c:\dumps
にクラッシュ ダンプ ファイルを保持するフォルダーを作成します。
次のアプリケーションの実行可能ファイル名で EnableDumps PowerShell スクリプトを実行します。
.\EnableDumps {APPLICATION EXE} c:\dumps
クラッシュが発生する条件の下でアプリを実行します。
クラッシュが発生した後、DisableDumps PowerShell スクリプトを実行します。
.\DisableDumps {APPLICATION EXE}
アプリがクラッシュし、ダンプの収集が完了したら、アプリを普通に終了してかまいません。 PowerShell スクリプトにより、アプリごとに最大 5 つのダンプを収集する WER が構成されます。
警告
クラッシュ ダンプでは、大量のディスク領域 (1 つにつき最大、数ギガバイト) が使用される場合があります。
アプリが起動時または正常な実行中に応答を停止するがクラッシュしない、または失敗するときは、「ユーザーモード ダンプ ファイル: 最適なツールの選択」を参照し、適切なツールを選択してダンプを生成します。
ダンプはいくつかの方法で分析できます。 詳細については、「Analyzing a User-Mode Dump File」(ユーザー モード ダンプ ファイルの分析) を参照してください。
ASP.NET Core アプリは、IIS を 使用せずに、Windows サービスとして Windows にホストできます。 Windows サービスとしてホストされている場合、サーバーの再起動後にアプリが自動的に起動します。
サンプル コードを表示またはダウンロードします (ダウンロード方法)。
ASP.NET Core ワーカー サービス テンプレートは、実行時間が長いサービス アプリを作成する場合の出発点として利用できます。 テンプレートを Windows サービス アプリの基礎として使用するには:
アプリには、Microsoft.Extensions.Hosting.WindowsServicesのパッケージ参照が必要です。
ホストのビルド時に IHostBuilder.UseWindowsService
が呼び出されます。 アプリが Windows サービスとして実行している場合、メソッドは
WindowsServiceLifetime
に設定します。CreateDefaultBuilder
" 以上です。Logging:EventLog:LogLevel:Default
appsettings.json
/ の appsettings.{Environment}.json
キーまたは他の構成プロバイダーでオーバーライドします。CreateHostBuilder
の Program.cs
で:
Host.CreateDefaultBuilder(args)
.UseWindowsService()
...
このトピックには、次のサンプル アプリが付属しています。
MVC のガイダンスについては、「ASP.NET Core MVC の概要」および「ASP.NET Core 2.2 から 3.0 への移行」にある記事を参照してください。
展開のシナリオに関する情報および注意事項については、「.NET Core アプリケーションの展開」をご覧ください。
Razor Pages または MVC フレームワークを使用する Web アプリ ベースのサービスでは、プロジェクト ファイルに Web SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Web">
サービスでバックグラウンド タスク (ホステッド サービスなど) のみを実行する場合は、プロジェクト ファイルにワーカー SDK を指定します。
<Project Sdk="Microsoft.NET.Sdk.Worker">
フレームワーク依存型展開 (FDD) は、ターゲット システムに .NET Core のシステム全体の共有バージョンが存在することに依存します。 この記事のガイダンスに従って、FDD シナリオを採用すると、フレームワーク依存型実行可能ファイル と呼ばれる実行可能ファイル ( .exe) が SDK によって生成されます。
Web SDK を使用している場合、web.config ファイル (通常 ASP.NET Core アプリを発行する際に生成されます) は、Windows サービス アプリに対しては必要ありません。 web.config ファイルの作成を無効にするには、<IsTransformWebConfigDisabled>
に設定した true
プロパティを追加します。
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>
自己完結型の展開 (SCD) は、ホスト システムに共有フレームワークが存在することに依存しません。 ランタイムとアプリの依存関係が、アプリと共に展開されます。
Windows ランタイム識別子 (RID) は、ターゲット フレームワークを格納する <PropertyGroup>
に含まれます。
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
複数の RID を発行するには、次の処理を実行します。
詳細については、「.NET Core の RID カタログ」を参照してください。
サービス用のユーザー アカウントを作成するには、PowerShell 6 の管理コマンド シェルから New-LocalUser コマンドレットを使用します。
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以降:
New-LocalUser -Name {SERVICE NAME}
Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以前の Windows OS:
powershell -Command "New-LocalUser -Name {SERVICE NAME}"
入力を求められたら、強力なパスワードを指定します。
-AccountExpires
コマンドレットに という有効期限で DateTime パラメーターを指定しない場合、アカウントは期限切れになりません。
詳しくは、「Microsoft.PowerShell.LocalAccounts」および「Service User Accounts (サービス ユーザー アカウント)」をご覧ください。
Active Directory を使う場合、ユーザーを管理するための別の方法は、マネージド サービス アカウントを使うことです。 詳細については、「Group Managed Service Accounts Overview (グループ マネージド サービス アカウントの概要)」をご覧ください。
サービス ユーザー アカウントにサービスとしてログオン権利を確立するには、次の処理を実行します。
{DOMAIN OR COMPUTER NAME\USER}
) を入力し、 [OK] を選択して、ポリシーにユーザーを追加します。PowerShell コマンドを使用して、サービスを登録します。 PowerShell 6 の管理コマンド シェルから次のコマンドを実行します。
$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}
: ホスト上のアプリの実行可能ファイルのパス (たとえば、d:\myservice
)。 このパスに、アプリの実行可能ファイル名は含めないでください。 末尾のスラッシュは、必要ありません。{DOMAIN OR COMPUTER NAME\USER}
:サービスのユーザー アカウント (Contoso\ServiceUser
など)。{SERVICE NAME}
:サービス名 (MyService
など)。{EXE FILE PATH}
: アプリの実行可能ファイルの完全なパス (d:\myservice\myservice.exe
など)。 拡張子付きの実行可能ファイルのファイル名を含めます。{DESCRIPTION}
:サービスの説明 (My sample service
など)。{DISPLAY NAME}
:サービスの表示名 (My Service
など)。次の PowerShell 6 コマンドでサービスを開始します。
Start-Service -Name {SERVICE NAME}
このコマンドでサービスを開始するには数秒かかります。
サービスの状態を確認するには、次の PowerShell 6 コマンドを使います。
Get-Service -Name {SERVICE NAME}
この状態は、次のいずれかの値として報告されます。
Starting
Running
Stopping
Stopped
次の PowerShell 6 コマンドでサービスを停止します。
Stop-Service -Name {SERVICE NAME}
サービスを停止した後、少ししてから、次の PowerShell 6 コマンドを使ってサービスを削除します。
Remove-Service -Name {SERVICE NAME}
インターネットまたは企業ネットワークからの要求とやり取りするサービスやプロキシまたはロード バランサーの背後にあるサービスでは、追加の構成が必要になる場合があります。 詳細については、「プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する」を参照してください。
既定では、ASP.NET Core は http://localhost:5000
にバインドされます。 ASPNETCORE_URLS
環境変数を設定して、URL とポートを構成します。
追加の URL とポートの構成方法については、関連するサーバーの記事を参照してください。
上記のガイダンスでは、HTTPS エンドポイントのサポートについて説明しています。 たとえば、Windows サービスで認証が使用されている場合は、アプリを HTTPS 用に構成します。
注意
サービス エンドポイントをセキュリティで保護するために ASP.NET Core の HTTPS 開発証明書を使用することはできません。
Windows サービスに対して GetCurrentDirectory を呼び出して返される現在の作業ディレクトリは C:\WINDOWS\system32 フォルダーです。 system32 フォルダーは、サービスのファイル (設定ファイルなど) を保存するために適した場所ではありません。 次のいずれかの方法を使用して、サービスのアセットと設定ファイルを管理し、アクセスします。
IHostEnvironment.ContentRootPath または ContentRootFileProvider を使用して、アプリのリソースを見つけます。
アプリがサービスとして実行されると、UseWindowsService によって ContentRootPath が AppContext.BaseDirectory に設定されます。
アプリの既定の設定ファイルである appsettings.json
と appsettings.{Environment}.json
は、ホストの構築中に CreateDefaultBuilder を呼び出すことで、アプリのコンテンツ ルートから読み込まれます。
ConfigureAppConfiguration の開発者コードによって読み込まれた他の設定ファイルについては、SetBasePath を呼び出す必要はありません。 次の例では、custom_settings.json
ファイルはアプリのコンテンツ ルートに存在しており、明示的にベース パスを設定しなくても読み込まれます。
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>();
});
}
Windows サービス アプリから現在のディレクトリとして GetCurrentDirectory フォルダーが返されるため、 を使用してリソース パスを取得しないでください。
ファイルを含むフォルダーに対して SetBasePath を使用するときは、IConfigurationBuilder を使用して絶対パスを指定します。
Windows サービス アプリのトラブルシューティングについては、「ASP.NET Core プロジェクトのトラブルシューティングとデバッグ」を参照してください。
New-Service
PowerShell コマンドの実行時に、ユーザーのパスワードの有効期限が切れていたか、正しく渡されていません。システム イベント ログとアプリケーション イベント ログにアクセスします。
多くのスタートアップ エラーでは、イベント ログに有用な情報が生成されません。 ホスティング システムのコマンド プロンプトでアプリを実行すると、エラーの原因がわかることがあります。 アプリからさらに詳細情報をログに記録するには、ログ レベルを低くするか、開発環境でアプリを実行します。
開発マシンで .NET Core SDK をアップグレードしたり、アプリ内のパッケージ バージョンを変更したりした直後に、機能しているアプリが失敗することがあります。 場合によっては、パッケージに統一性がないと、メジャー アップグレード実行時にアプリが破壊されることがあります。 これらの問題のほとんどは、次の手順で解決できます。
bin フォルダーと obj フォルダーを削除します。
コマンド シェルから dotnet nuget locals all --clear を実行して、パッケージ キャッシュをクリアします。
パッケージ キャッシュをクリアするには、nuget.exe ツールを使用して nuget locals all -clear
コマンドを実行する方法もあります。 nuget.exe は、Windows デスクトップ オペレーティング システムにバンドルされているインストールではなく、NuGet Web サイトから別に入手する必要があります。
プロジェクトを復元してリビルドします。
アプリを再展開する前に、サーバー上の展開フォルダー内のすべてのファイルを削除します。
"クラッシュ ダンプ" とはシステムのメモリのスナップショットであり、アプリのクラッシュ、起動の失敗、遅いアプリの原因を突き止めるのに役立ちます。
Windows エラー報告 (WER) からダンプを取得して分析します。
c:\dumps
にクラッシュ ダンプ ファイルを保持するフォルダーを作成します。
次のアプリケーションの実行可能ファイル名で EnableDumps PowerShell スクリプトを実行します。
.\EnableDumps {APPLICATION EXE} c:\dumps
クラッシュが発生する条件の下でアプリを実行します。
クラッシュが発生した後、DisableDumps PowerShell スクリプトを実行します。
.\DisableDumps {APPLICATION EXE}
アプリがクラッシュし、ダンプの収集が完了したら、アプリを普通に終了してかまいません。 PowerShell スクリプトにより、アプリごとに最大 5 つのダンプを収集する WER が構成されます。
警告
クラッシュ ダンプでは、大量のディスク領域 (1 つにつき最大、数ギガバイト) が使用される場合があります。
アプリが起動時または正常な実行中に応答を停止するがクラッシュしない、または失敗するときは、「ユーザーモード ダンプ ファイル: 最適なツールの選択」を参照し、適切なツールを選択してダンプを生成します。
ダンプはいくつかの方法で分析できます。 詳細については、「Analyzing a User-Mode Dump File」(ユーザー モード ダンプ ファイルの分析) を参照してください。
ASP.NET Core に関するフィードバック
ASP.NET Core はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
トレーニング
モジュール
App Service 診断を使用した Web App Down シナリオのトラブルシューティング - Training
Web App Down、Crash Monitoring、および Ask Genie を利用してトラブルシューティングを行います。 これらのツールを使用して、アプリケーションとプラットフォームの可用性を監視し、未処理の例外を識別し、メモリ ダンプと呼び出し履歴をキャプチャし、調査と診断の領域を見つけます。
ドキュメント
ホスティング環境を設定し、ASP.NET Core アプリを展開する方法を学習します。
ASP.NET Core の Kestrel Web サーバー
ASP.NET Core 用のクロスプラットフォーム Web サーバーである Kestrel について説明します。
BackgroundService を使って Windows サービスを作成する - .NET
.NET で BackgroundService を使用して Windows サービスを作成する方法について説明します。
ASP.NET Core Kestrel Web サーバーのエンドポイントを構成する
ASP.NET Core 用のクロスプラットフォーム Web サーバーである Kestrel でエンドポイントを構成する方法について説明します。