LoginSignup
8
4

More than 1 year has passed since last update.

Blazor Sever のプロセス実行時、待ち受けアドレス/ポートを指定する 4 つの方法

Last updated at Posted at 2021-12-24

Blazor Server アプリは、インターネット上へ公開しての運用のみならず、下記「Blazor serverをラズパイに入れてFAしたい」の記事のように、Blazor Server プログラム (これはつまるところ、コンソールアプリです) をそのまま、内蔵の Kestrel で稼働させる使い方もあります。

さて、一般的な造りの Blazor Server プログラムの場合、"dotnet publish" コマンドなどで発行したプログラムファイルを実行すると、ローカルループバックアドレスの TCP 5000 番および 5001 番 (それぞれ HTTP、HTTPS) で待ち受けするのが既定の動作です。

この既定の動作のままですと、いわゆる "外部" からの HTTP 要求に、この Blazor Server アプリケーションは返答してくれません。
外部からの接続も受け付けるようにするためには、待ち受けアドレスを、例えば "http://+:80/" といった指定にする必要があります。

ではどのようにすれば、Blazor Server アプリケーションの待ち受けアドレスを変更できるでしょうか。

以下では、自分が知っているその方法 x 4つを紹介します。

方法 1. Program.cs で指定する

先に紹介の「Blazor serverをラズパイに入れてFAしたい」の記事で行なわれていた方法はこちらです。

Blazor Serevr アプリケーションの初期化時、Web ホストビルダーに対して、.UseUrls() 拡張メソッドを呼び出し、その引数に待ち受けアドレスを指定することで実現します。

.NET 6 のトップレベルステートメント/Minimal API スタイルで実装している場合は、下記のようなコードになることでしょう。

Program.cs
...
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("http://+:80/");
...

方法 2. appsettings.json で指定する

C# ソースコード中で指定する以外に、appsettings.json アプリケーション構成ファイル中でも、待ち受けアドレスを指定できます。

下記のように、構成エントリ名 "urls" の値に、待ち受けアドレスを指定してあげれば OK です。

appsettings.json
{
  "urls": "http://+:80/",
   ...

方法 3. コマンドライン引数で指定する

さてところで、Blazor Server アプリケーションといいますか、.NET ホストの構造に基づく .NET アプリケーション全般では、一般的な造りですと、構成情報は appsettings.json のみならず、プログラム実行時のコマンドライン引数からも読み取っています。

具体的には、コマンドライン引数にハイフン x 2つに続けて構成エントリ名を指定し、空白または = を挟んで値を書くと、構成情報として取り込まれます。

ということで、待ち受けアドレスを指定する構成エントリの名前は、urls なので、以下のようにコマンドライン引数を指定して実行すれば、待ち受けアドレスをプログラム実行時に指定できます。

$ ./BlazorServerApp --urls https://+:80/

方法 4. 環境変数で指定する

さらに実は、一般的な造りの .NET ホストアプリケーションでは、appsettings.json やコマンドライン引数に加えて、環境変数からも構成情報を読み取っています。

具体的には、"ASPNETCORE_{構成エントリ名}" および "DOTNET_{構成エントリ名}" というように、"ASPNETCORE_" および "DOTNET_" で始まる名前の環境変数が、構成情報として取り込まれます。

各 OS 環境やシェルに応じて適宜読み替えていただければと思いますが、例えば Ubuntu の bash シェル上ですと、以下のいずれかを実行して環境変数を設定したのちに、Blazor Server プログラムを実行すれば、指定した待ち受けアドレスで動作するようになります。

$ export ASPNETCORE_URLS=http://+:80/
$ export DOTNET_URLS=http://+:80/

優先順位

さてところで、これら待ち受けアドレスを指定する方法を同時に混ぜて指定するとどうなるでしょうか。

試してみたところ、下記の優先順位 (強い順) になるようです。

  1. コマンドライン引数
  2. 環境変数 ASPNETCORE_URLS
  3. 環境変数 DOTNET_URLS
  4. Program.cs (UserUrl("..."))
  5. appsettings.json

(つまり、上記リスト中、より下の行の方法で指定した待ち受けアドレスよりも、より上の行の方法で指定した待ち受けアドレスのほうが採用されます)

おわりに

以上、Blazor Server アプリケーションにおいて、待ち受けアドレスを指定する方法 x 4 つを紹介させていただきました。

冒頭のとおり、インターネット上への公開のみならず、工業用途等での Blazor Server アプリケーションの活用において、今回紹介の方法で待ち受けアドレスを構成するなど役に立てればと思います。

Learn, Practice, Share!

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4