ASP.NET SignalR と ASP.NET Core の違い SignalRDifferences between ASP.NET SignalR and ASP.NET Core SignalR

ASP.NET Core SignalR は、ASP.NET のクライアントまたはサーバーと互換性がありません SignalR 。ASP.NET Core SignalR isn't compatible with clients or servers for ASP.NET SignalR. この記事では、ASP.NET Core で削除または変更された機能について詳しく説明 SignalR します。This article details features which have been removed or changed in ASP.NET Core SignalR.

バージョンを識別する方法 SignalRHow to identify the SignalR version

ASP.NET SignalRASP.NET SignalR ASP.NET Core SignalRASP.NET Core SignalR
サーバー NuGet パッケージServer NuGet package Microsoft AspNet。SignalRMicrosoft.AspNet.SignalR [なし] :None. AspNetCore共有フレームワークに含まれています。Included in the Microsoft.AspNetCore.App shared framework.
クライアント NuGet パッケージClient NuGet packages Microsoft SignalR . AspNet.ClientMicrosoft.AspNet.SignalR.Client
Microsoft SignalR . AspNet.NODE.JSMicrosoft.AspNet.SignalR.JS
AspNetCore SignalR .ClientMicrosoft.AspNetCore.SignalR.Client
JavaScript クライアント npm パッケージJavaScript client npm package signalrsignalr @microsoft/signalr
Java クライアントJava client GitHub リポジトリ (非推奨)GitHub Repository (deprecated) Maven パッケージ signalrMaven package com.microsoft.signalr
サーバーアプリの種類Server app type ASP.NET (System.web) または OWIN Self-HostASP.NET (System.Web) or OWIN Self-Host ASP.NET CoreASP.NET Core
サポートされているサーバープラットフォームSupported server platforms .NET Framework 4.5 以降.NET Framework 4.5 or later .NET Core 3.0 以降.NET Core 3.0 or later
ASP.NET SignalRASP.NET SignalR ASP.NET Core SignalRASP.NET Core SignalR
サーバー NuGet パッケージServer NuGet package Microsoft AspNet。SignalRMicrosoft.AspNet.SignalR AspNetCore (.net Core)Microsoft.AspNetCore.App (.NET Core)
AspNetCore。SignalRMicrosoft.AspNetCore.SignalR (.NET Framework)(.NET Framework)
クライアント NuGet パッケージClient NuGet packages Microsoft SignalR . AspNet.ClientMicrosoft.AspNet.SignalR.Client
Microsoft SignalR . AspNet.NODE.JSMicrosoft.AspNet.SignalR.JS
AspNetCore SignalR .ClientMicrosoft.AspNetCore.SignalR.Client
JavaScript クライアント npm パッケージJavaScript client npm package signalrsignalr @aspnet/signalr
Java クライアントJava client GitHub リポジトリ (非推奨)GitHub Repository (deprecated) Maven パッケージ signalrMaven package com.microsoft.signalr
サーバーアプリの種類Server app type ASP.NET (System.web) または OWIN Self-HostASP.NET (System.Web) or OWIN Self-Host ASP.NET CoreASP.NET Core
サポートされているサーバープラットフォームSupported server platforms .NET Framework 4.5 以降.NET Framework 4.5 or later .NET Framework 4.6.1 以降.NET Framework 4.6.1 or later
.NET Core 2.1 以降.NET Core 2.1 or later

機能の違いFeature differences

自動再接続Automatic reconnects

ASP.NET の場合 SignalR :In ASP.NET SignalR:

  • 既定では、は、 SignalR 接続が切断された場合にサーバーへの再接続を試みます。By default, SignalR attempts to reconnect to the server if the connection is dropped.

ASP.NET Core SignalR :In ASP.NET Core SignalR:

HubConnection connection = new HubConnectionBuilder()
    .WithUrl(new Uri("http://127.0.0.1:5000/chathub"))
    .WithAutomaticReconnect()
    .Build();
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .withAutomaticReconnect()
    .build();

ASP.NET Core 3.0 より前では、は自動再接続をサポートして SignalR いません。Prior to ASP.NET Core 3.0, SignalR doesn't support automatic reconnects. クライアントが切断されている場合、ユーザーは新しい接続を明示的に開始して再接続する必要があります。If the client is disconnected, the user must explicitly start a new connection to reconnect. ASP.NET では SignalR 、 SignalR 接続が切断された場合、はサーバーへの再接続を試みます。In ASP.NET SignalR, SignalR attempts to reconnect to the server if the connection is dropped.

プロトコルのサポートProtocol support

ASP.NET Core SignalR は、 messagepackに基づく新しいバイナリプロトコルだけでなく、JSON もサポートしています。ASP.NET Core SignalR supports JSON, as well as a new binary protocol based on MessagePack. さらに、カスタムプロトコルを作成することもできます。Additionally, custom protocols can be created.

トランスポートTransports

永続的フレーム転送は ASP.NET Core ではサポートされていません SignalR 。The Forever Frame transport isn't supported in ASP.NET Core SignalR.

サーバーの相違点Differences on the server

ASP.NET Core SignalR サーバー側ライブラリは、 AspNetCoreに含まれています。これは、と MVC プロジェクトの両方の ASP.NET Core Web アプリケーション テンプレートで使用されます。 RazorThe ASP.NET Core SignalR server-side libraries are included in Microsoft.AspNetCore.App, which is used in the ASP.NET Core Web Application template for both Razor and MVC projects.

ASP.NET Core SignalR は ASP.NET Core ミドルウェアです。ASP.NET Core SignalR is an ASP.NET Core middleware. のを呼び出すことによって構成する必要があり AddSignalR Startup.ConfigureServices ます。It must be configured by calling AddSignalR in Startup.ConfigureServices.

services.AddSignalR()

ルーティングを構成するには、メソッド内のメソッド呼び出し内のハブにルートをマップし UseEndpoints Startup.Configure ます。To configure routing, map routes to hubs inside the UseEndpoints method call in the Startup.Configure method.

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/hub");
});

ルーティングを構成するには、メソッド内のメソッド呼び出し内のハブにルートをマップし UseSignalR Startup.Configure ます。To configure routing, map routes to hubs inside the UseSignalR method call in the Startup.Configure method.

app.UseSignalR(routes =>
{
    routes.MapHub<ChatHub>("/hub");
});

固定セッションSticky sessions

ASP.NET のスケールアウトモデルを SignalR 使用すると、クライアントは再接続し、ファーム内の任意のサーバーにメッセージを送信できます。The scaleout model for ASP.NET SignalR allows clients to reconnect and send messages to any server in the farm. ASP.NET Core では、 SignalR クライアントは接続中に同じサーバーと通信する必要があります。In ASP.NET Core SignalR, the client must interact with the same server for the duration of the connection. Redis を使用したスケールアウトの場合、これは固定セッションが必要であることを意味します。For scaleout using Redis, that means sticky sessions are required. Azure SignalR サービスを使用したスケールアウトでは、サービスがクライアントへの接続を処理するため、固定セッションは必要ありません。For scaleout using Azure SignalR Service, sticky sessions aren't required because the service handles connections to clients.

接続ごとに1つのハブSingle hub per connection

ASP.NET Core では SignalR 、接続モデルが単純化されています。In ASP.NET Core SignalR, the connection model has been simplified. 複数のハブへのアクセスを共有するために使用される単一の接続ではなく、1つのハブに直接接続されます。Connections are made directly to a single hub, rather than a single connection being used to share access to multiple hubs.

ストリーミングStreaming

ASP.NET Core は、 SignalR ハブからクライアントへの データのストリーミング をサポートするようになりました。ASP.NET Core SignalR now supports streaming data from the hub to the client.

StateState

クライアントとハブ (多くの場合はと呼ばれます) の間で任意の状態を渡す機能は HubState 削除されており、進行状況メッセージもサポートされています。The ability to pass arbitrary state between clients and the hub (often called HubState) has been removed, as well as support for progress messages. 現時点では、対応するハブプロキシはありません。There is no counterpart of hub proxies at the moment.

PersistentConnection の削除PersistentConnection removal

ASP.NET Core では SignalR 、 PersistentConnection クラスは削除されています。In ASP.NET Core SignalR, the PersistentConnection class has been removed.

GlobalHostGlobalHost

ASP.NET Core には、フレームワークに依存関係の挿入 (DI) が組み込まれています。ASP.NET Core has dependency injection (DI) built into the framework. サービスは DI を使用して HubContextにアクセスできます。Services can use DI to access the HubContext. GlobalHostを取得するために ASP.NET で使用されるオブジェクトが SignalR HubContext ASP.NET Core に存在しません SignalR 。The GlobalHost object that is used in ASP.NET SignalR to get a HubContext doesn't exist in ASP.NET Core SignalR.

HubPipelineHubPipeline

ASP.NET Core SignalR はモジュールをサポートしていません HubPipelineASP.NET Core SignalR doesn't have support for HubPipeline modules.

クライアントの相違点Differences on the client

TypeScriptTypeScript

ASP.NET Core SignalR クライアントは TypeScriptで記述されています。The ASP.NET Core SignalR client is written in TypeScript. Javascript クライアントを使用する場合は、javascript または TypeScript で記述できます。You can write in JavaScript or TypeScript when using the JavaScript client.

JavaScript クライアントは npm でホストされます。The JavaScript client is hosted at npm

ASP.NET のバージョンでは、JavaScript クライアントは Visual Studio の NuGet パッケージを使用して取得されました。In ASP.NET versions, the JavaScript client was obtained through a NuGet package in Visual Studio. ASP.NET Core のバージョンでは、 @microsoft/signalr npm パッケージに JavaScript ライブラリが含まれています。In the ASP.NET Core versions, the @microsoft/signalr npm package contains the JavaScript libraries. このパッケージは、 ASP.NET Core Web アプリケーション テンプレートには含まれていません。This package isn't included in the ASP.NET Core Web Application template. Npm パッケージを取得してインストールするには、npm を使用し @microsoft/signalr ます。Use npm to obtain and install the @microsoft/signalr npm package.

npm init -y
npm install @microsoft/signalr

ASP.NET のバージョンでは、JavaScript クライアントは Visual Studio の NuGet パッケージを使用して取得されました。In ASP.NET versions, the JavaScript client was obtained through a NuGet package in Visual Studio. ASP.NET Core のバージョンでは、 @aspnet/signalr npm パッケージに JavaScript ライブラリが含まれています。In the ASP.NET Core versions, the @aspnet/signalr npm package contains the JavaScript libraries. このパッケージは、 ASP.NET Core Web アプリケーション テンプレートには含まれていません。This package isn't included in the ASP.NET Core Web Application template. Npm パッケージを取得してインストールするには、npm を使用し @aspnet/signalr ます。Use npm to obtain and install the @aspnet/signalr npm package.

npm init -y
npm install @aspnet/signalr

jQueryjQuery

JQuery への依存関係は削除されましたが、プロジェクトは引き続き jQuery を使用できます。The dependency on jQuery has been removed, however projects can still use jQuery.

Internet Explorer のサポートInternet Explorer support

ASP.NET Core SignalR は Microsoft internet explorer をサポートしていませんが、ASP.NET で SignalR は Microsoft internet explorer 8 以降がサポートされています。ASP.NET Core SignalR doesn't support Microsoft Internet Explorer, whereas ASP.NET SignalR supports Microsoft Internet Explorer 8 or later. 詳細については、「ASP.NET Core SignalR でサポートされているプラットフォーム」を参照してください。For more information, see ASP.NET Core SignalR でサポートされているプラットフォーム.

JavaScript クライアントメソッドの構文JavaScript client method syntax

JavaScript の構文は、ASP.NET バージョンのから変更されました SignalR 。The JavaScript syntax has changed from the ASP.NET version of SignalR. オブジェクトを使用するのではなく $connectionHubConnectionBuilder API を使用して接続を作成します。Rather than using the $connection object, create a connection using the HubConnectionBuilder API.

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Onメソッドを使用して、ハブが呼び出すことができるクライアントメソッドを指定します。Use the on method to specify client methods that the hub can call.

JavaScript の構文は、ASP.NET バージョンのから変更されました SignalR 。The JavaScript syntax has changed from the ASP.NET version of SignalR. オブジェクトを使用するのではなく $connectionHubConnectionBuilder API を使用して接続を作成します。Rather than using the $connection object, create a connection using the HubConnectionBuilder API.

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Onメソッドを使用して、ハブが呼び出すことができるクライアントメソッドを指定します。Use the on method to specify client methods that the hub can call.

connection.on("ReceiveMessage", (user, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = `${user} says ${msg}`;
    console.log(encodedMsg);
});

クライアントメソッドを作成したら、ハブ接続を開始します。After creating the client method, start the hub connection. Catchメソッドをチェーンして、エラーをログに記録または処理します。Chain a catch method to log or handle errors.

connection.start().catch(err => console.error(err));

ハブプロキシHub proxies

ハブプロキシが自動的に生成されなくなりました。Hub proxies are no longer automatically generated. 代わりに、メソッド名が文字列として invoke API に渡されます。Instead, the method name is passed into the invoke API as a string.

ハブプロキシが自動的に生成されなくなりました。Hub proxies are no longer automatically generated. 代わりに、メソッド名が文字列として invoke API に渡されます。Instead, the method name is passed into the invoke API as a string.

.NET とその他のクライアント.NET and other clients

AspNetCore. SignalR .クライアントNuGet パッケージには、ASP.NET Core 用の .net クライアントライブラリが含まれてい SignalR ます。The Microsoft.AspNetCore.SignalR.Client NuGet package contains the .NET client libraries for ASP.NET Core SignalR.

HubConnectionBuilderハブへの接続のインスタンスを作成して構築するには、を使用します。Use the HubConnectionBuilder to create and build an instance of a connection to a hub.

connection = new HubConnectionBuilder()
    .WithUrl("url")
    .Build();

スケールアウトの相違点Scaleout differences

ASP.NET は SignalR SQL Server と Redis をサポートしています。ASP.NET SignalR supports SQL Server and Redis. ASP.NET Core SignalR では SignalR 、Azure サービスと Redis がサポートされています。ASP.NET Core SignalR supports Azure SignalR Service and Redis.

ASP.NETASP.NET

ASP.NET CoreASP.NET Core

その他のリソースAdditional resources