🔥

.NET Aspire の起動時にタイムアウトのエラーが発生する場合の対処方法

2024/06/15に公開

発生するエラー

.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 は以下のようになっていました。

Properties/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"
      }
    }
  }
}

httpsapplicationUrl を変更してポートを変更します。7260 を 7261 に変更してみました。

Properties/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: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 で実行したのですがわかりませんでした。なんだろうこれ…。

Microsoft (有志)

Discussion