Blazor サーバーをホストして展開するHost and deploy Blazor Server

作成者: Luke LathamRainer StropekDaniel RothBy Luke Latham, Rainer Stropek, and Daniel Roth

ホストの構成値Host configuration values

Blazor サーバー アプリでは、汎用ホスト構成値を受け入れることができます。Blazor Server apps can accept Generic Host configuration values.

配置Deployment

Blazor サーバーのホスティング モデルを使用する場合、Blazor はサーバー上で ASP.NET Core アプリ内から実行されます。Using the Blazor Server hosting model, Blazor is executed on the server from within an ASP.NET Core app. UI の更新、イベント処理、JavaScript の呼び出しは、SignalR 接続経由で処理されます。UI updates, event handling, and JavaScript calls are handled over a SignalR connection.

ASP.NET Core アプリをホストできる Web サーバーが必要です。A web server capable of hosting an ASP.NET Core app is required. Visual Studio には Blazor サーバー アプリ プロジェクト テンプレートが含まれています (dotnet new コマンドを使用する場合は blazorserverside テンプレート)。Visual Studio includes the Blazor Server App project template (blazorserverside template when using the dotnet new command).

スケーラビリティScalability

Blazor サーバー アプリで使用できるインフラストラクチャを最大限に活用できるように展開を計画します。Plan a deployment to make the best use of the available infrastructure for a Blazor Server app. Blazor サーバー アプリのスケーラビリティに対処するには、次のリソースを参照してください。See the following resources to address Blazor Server app scalability:

展開サーバーDeployment server

1 台のサーバーのスケーラビリティ (スケールアップ) を検討する場合、アプリに使用できるメモリは、ユーザーの要求が増えたときにアプリによって使い果たされる最初のリソースになります。When considering the scalability of a single server (scale up), the memory available to an app is likely the first resource that the app will exhaust as user demands increase. サーバー上の使用可能なメモリは、以下の影響を受けます。The available memory on the server affects the:

  • サーバーがサポートできるアクティブ回線の数。Number of active circuits that a server can support.
  • クライアントでの UI の待機時間。UI latency on the client.

セキュリティで保護されたスケーラブルな Blazor サーバー アプリを構築するためのガイダンスについては、「ASP.NET Core Blazor サーバーアプリをセキュリティで保護する」を参照してください。For guidance on building secure and scalable Blazor server apps, see ASP.NET Core Blazor サーバーアプリをセキュリティで保護する.

各回線では、最小限の Hello World スタイルのアプリに約 250 KB のメモリが使用されます。Each circuit uses approximately 250 KB of memory for a minimal Hello World-style app. 回線のサイズは、アプリのコードと各コンポーネントに関連付けられている状態の保守要件によって変わります。The size of a circuit depends on the app's code and the state maintenance requirements associated with each component. アプリとインフラストラクチャの開発時にはリソースのニーズを測定することをお勧めしますが、展開ターゲットを計画する際に、次のベースラインを出発点にすることができます。アプリで 5,000 人の同時ユーザーをサポートすることを想定している場合は、アプリに対して少なくとも 1.3 GB のサーバー メモリ (またはユーザーあたり最大 273 KB) の予算を割り当てること検討してください。We recommend that you measure resource demands during development for your app and infrastructure, but the following baseline can be a starting point in planning your deployment target: If you expect your app to support 5,000 concurrent users, consider budgeting at least 1.3 GB of server memory to the app (or ~273 KB per user).

SignalR の構成SignalR configuration

Blazor サーバー アプリでは、ブラウザーとの通信に ASP.NET Core SignalR が使用されます。Blazor Server apps use ASP.NET Core SignalR to communicate with the browser. SignalR のホストとスケールの条件は、Blazor サーバー アプリに適用されます。SignalR's hosting and scaling conditions apply to Blazor Server apps.

Blazor は、待ち時間、信頼性、およびセキュリティが低いために WebSocket を SignalR トランスポートとして使用する場合に最適です。Blazor works best when using WebSockets as the SignalR transport due to lower latency, reliability, and security. WebSocket が使用できない場合や、ロング ポーリングを使用するようにアプリが明示的に構成されている場合は、SignalR によってロング ポーリングが使用されます。Long Polling is used by SignalR when WebSockets isn't available or when the app is explicitly configured to use Long Polling. Azure App Service にデプロイする場合は、サービスの Azure portal 設定で WebSocket を使用するようにアプリを構成します。When deploying to Azure App Service, configure the app to use WebSockets in the Azure portal settings for the service. Azure App Service 用にアプリを構成する方法の詳細については、SignalR の発行ガイドラインを参照してください。For details on configuring the app for Azure App Service, see the SignalR publishing guidelines.

Blazor サーバー アプリには Azure SignalR Service を使用することをお勧めします。We recommend using the Azure SignalR Service for Blazor Server apps. このサービスでは、多数の同時 SignalR 接続に対して Blazor Server アプリをスケールアップできます。The service allows for scaling up a Blazor Server app to a large number of concurrent SignalR connections. さらに、SignalR サービスのグローバル リーチと高パフォーマンスのデータ センターは、地理的条件による待機時間の短縮に役立ちます。In addition, the SignalR service's global reach and high-performance data centers significantly aid in reducing latency due to geography. アプリの構成 (および必要に応じてプロビジョニング) を行うために、Azure SignalR Service によって次が実行されます。To configure an app (and optionally provision) the Azure SignalR Service:

  • Blazor サーバー アプリ用に、Visual Studio に Azure アプリ発行プロファイルを作成する。Create an Azure Apps publish profile in Visual Studio for the Blazor Server app.
  • プロファイルに Azure SignalR Service の依存関係を追加する。Add the Azure SignalR Service dependency to the profile. Azure サブスクリプションに、アプリに割り当てる既存の Azure SignalR Service のインスタンスがない場合は、 [新しい Azure SignalR Service のインスタンスを作成する] を選択して新しいサービス インスタンスをプロビジョニングします。If the Azure subscription doesn't have a pre-existing Azure SignalR Service instance to assign to the app, select Create a new Azure SignalR Service instance to provision a new service instance.
  • アプリを Azure に発行するPublish the app to Azure.

ネットワーク待機時間の測定Measure network latency

次の例に示すように、JS 相互運用機能を使用してネットワーク待機時間を測定できます。JS interop can be used to measure network latency, as the following example demonstrates:

@inject IJSRuntime JS

@if (latency is null)
{
    <span>Calculating...</span>
}
else
{
    <span>@(latency.Value.TotalMilliseconds)ms</span>
}

@code
{
    private DateTime startTime;
    private TimeSpan? latency;

    protected override async Task OnInitializedAsync()
    {
        startTime = DateTime.UtcNow;
        var _ = await JS.InvokeAsync<string>("toString");
        latency = DateTime.UtcNow - startTime;
    }
}

妥当な UI エクスペリエンスを実現するために、UI の待機時間を 250 ミリ秒以下にすることをお勧めします。For a reasonable UI experience, we recommend a sustained UI latency of 250ms or less.