ASP.NET 5でのSignalRの使用

2863 ワード

(この文章は同時に本人の微信の公衆番号「dotNET毎日精華文章」に発表され、右のQRコードに注目してください.)
注記:SignalRをASPとする.NETでWebのリアルタイム双方向通信を行うコンポーネントは、ASP.NET 5においても同期的に発展している.しかし、用法は以前と細部で異なり、資料は相対的に少ない.この文書は簡単な入門ガイドです.
SignalRにより、開発者はASP.NETが開発したWebアプリケーションでは,サーバとクライアントの双方向のリアルタイム通信を実現する.サーバは、オンラインのクライアントにコンテンツを即時にプッシュできます.SignalRは、最下位の実装としてWeb Socketsを優先し、非現代ブラウザに対しても他の互換技術にロールバックすることができます.リンク管理、パケット接続、ライセンス制御など、豊富な機能を備えています.
ASP.NET 5時代にはSignalRも同期してSignalR 3にアップグレード.xですが、Javascriptのクライアントライブラリは2です.xバージョン.また、用法は以前とASP.NET 4.x時代(例えばASP.NET MVC 5)はまだ微妙な違いがあるため、既存のドキュメントを参照するとエラーが発生する可能性があります.ではどうやってASPでNET 5のWebアプリケーションではSignalR 3を使用していますが、以下では手順を簡単に説明します.
1、言うまでもなく、最初から新しいASPを作りました.NET 5のWebアプリケーションプロジェクト
2、新規作成に成功しました.Solution Explorerで「project.json」ファイルを開き、「dependencies」に「Microsoft.AspNet.SignalR.Server」:「3.0.0-rc 1-final」を追加して、SignalRのサービス側関数ライブラリを参照します.
3、「Dependencies」を展開し、「Bower」ノードを右クリックし、「Manage Bower Packages...」オプションを選択し、Bowerパッケージインストールインタフェースで「Browse」に切り替え、「SignalR」を検索してインストールします.注意すべきは、この文書を書くときはsignalr 2.2.0のjs関数ライブラリしかインストールできませんが、使用には影響しません.
4「Hubs」という名前のフォルダを作成してすべてのHubクラスを含めることを推奨します.推奨仕様では、必須ではありません.HubsフォルダにChatHubというクラスを追加し、Microsoft.AspNet.SignalR.Hubを継承します.
5,理論的には,サービス側からクライアントにメッセージをプッシュするだけであれば,Hubクラスには何も書かなくてもよい.しかし、簡単なチャット機能を実現するために、クライアント呼び出しのために2つの方法SendとJoinを書いた.コードは次のとおりです.
public class ChatHub : Hub
{
    public void Send(string message)
    {
        var name = Context.Request.HttpContext.Session.GetString("name");
        Clients.All.addNewMessageToPage(name, message);
    }

    public void Join(string name)
    {
        Context.Request.HttpContext.Session.SetString("name", name);
    }
}

6、そしてStartup.csファイルの「ConfigureServices」に2行のコードservices.AddSignalR();services.AddTransient();(2行目のコードの目的は、後でHub外部でクライアントメソッドを呼び出すときに、依存注入を容易に行うことです.)次に「Configure」に1行のコードapp.UseSignalR()を追加します.
7,ビューファイルにメッセージを追加,送信,メッセージを表示するインタフェースを実現し,コードは基本的に参照されている(http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc)も参照してください.チャットに参加する機能を追加しました.また、自動的に生成されたhubエージェントjsファイルを参照するアドレスは、「signalr/hubs」から「signalr/js」に変更されます.このアドレスは、Startupで構成できますが、デフォルト値はこれで、以前とは異なります.
8.Hubからクライアントにメッセージを送信するには、サービス側のコードでIHubContextを依存注入により参照し、dynamicメソッドを直接呼び出す必要がある.コードは次のとおりです.
private readonly IHubContext<ChatHub> _hub;

public HomeController(IHubContext<ChatHub> hub)
{
    _hub = hub;
}

public IActionResult SendMessageToClients(string message)
{
    _hub.Clients.All.sendMessageFromServer(message);
    return Content("<h1>OK</h1>");
}

完全なプロジェクトコード共有アドレスは次のとおりです.https://zyg.blob.core.windows.net/share/ASP.NET%205%20SignalR.zip