.NET Aspire の起動時にタイムアウトのエラーが発生する場合の対処方法
発生するエラー
.NET Aspire のプロジェクトを実行しようとすると以下のようなエラーが発生することがあります。
fail: Aspire.Hosting.Dcp.dcpctrl.ServiceReconciler[0]
could not start the proxy {"ServiceName": {"name":"webhooksclient_https"}, "Reconciliation": 36, "error": "cound not start the proxy for the service: listen tcp [::1]:7260: bind: An attempt was made to access a socket in a way forbidden by its access permissions."}
fail: Microsoft.Extensions.Hosting.Internal.Host[11]
Hosting failed to start
Polly.Timeout.TimeoutRejectedException: The operation didn't complete within the allowed timeout of '00:00:10'.
---> System.Threading.Tasks.TaskCanceledException: A task was canceled.
at k8s.Watcher`1.CreateWatchEventEnumerator(Func`1 streamReaderCreator, Action`1 onError, CancellationToken cancellationToken)+MoveNext()
... 以下略 ...
私の場合は .NET Aspire を試す際によくお勧めされる .NET のアプリケーションのリファレンス実装である eShop を実行しようとして発生しました。
これは webhooksclient_https
が使用する 7260 ポートが既に使用されているために起動に失敗していることが原因です。
対処法
ポートを変更する
これが一番簡単な対処方法です。
この場合は WebhooksClient
プロジェクトの起動時に問題が起きているので WebhooksClient
プロジェクトの Properties/launchSettings.json
を開いて applicationUrl
を変更します。
実際に WebhooksClient
プロジェクトの launchSettings.json
は以下のようになっていました。
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:64178",
"sslPort": 44365
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5062",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7260;http://localhost:5062",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
https
の applicationUrl
を変更してポートを変更します。7260 を 7261 に変更してみました。
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:64178",
"sslPort": 44365
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5062",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7261;http://localhost:5062",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
この状態で実行するとエラーが解消されるはずです。
余談
基本的には使用していないポートを使うことで解決なのですが、誰が該当のポートを使っているのかを調べようとしました。
以下のようなコマンドでポート番号 7260 を使用しているプロセスを調べることが出来ます。
> netstat -nao | Select-String ":7260"
私のマシンで実行したところ以下のような結果になりました。
> netstat -nao | Select-String ":7260"
TCP 0.0.0.0:7260 0.0.0.0:0 LISTENING 16780
TCP [::]:7260 [::]:0 LISTENING 16780
一番右側の数字がプロセス ID になります。このプロセス ID が何のプロセスかを調べるには以下のようなコマンドを実行します。
> Get-Process -Id 16780
これでプロセスが判明することを期待したのですが 16780 というプロセス ID は存在しないという結果になりました。管理者権限で起動した Windows Terminal で実行したのですがわかりませんでした。なんだろうこれ…。
Discussion