これも Ignite 2018 で発表されましたが、予定通り Azure SignalR Service が GA となりました。
分かりやすい変更点としては SLA 99.9% が付いたり、Standard Tier での 100 units までのスケールアウトがサポートされて、仕様上は 10 万コネクションまで扱えるようになりました。
GA 後の Standard Tier の価格は 1 unit 当たり 2800 円 / 月ぐらいなので、Redis Cache のサイズなどで悩んだりするより、SignalR Service に移行した方が全体的なコスト最適化となる可能性が高いですね。
今後は Standard より上の Tier も出るみたいですし、スケーリングに関しては大体のケースで問題となることは無くなるでしょう。ちなみに今回は珍しく Japan East に最初からデプロイされました。
それよりも気になったのは、サポートされているライブラリの紹介の 1 文です。
The Azure SignalR Service supports existing libraries for ASP.NET Core, ASP.NET, Java, and JavaScript clients, opening this service to a broad array of developers.
ASP.NET Core や Java / JavaScript は分かるんですが、ひっそりと ASP.NET も入っています。
気になったので Ignite 2018 の SignalR Service セッションを確認すると、Core じゃない ASP.NET SignalR を使って SignalR Service を利用するデモが行われていました。
ひっそりと ASP.NET SignalR 向けのライブラリが公開されていましたが、ダウンロード数が少ないですね。
ASP.NET Core SignalR への移行は地味に面倒な部分があるので、既に ASP.NET SignalR でアプリケーションを動かしている場合でも SignalR Service が選択肢に入りそうです。
早速なのでサンプルアプリケーションを使って試しておきました。とりあえず SignalR Service を新しく作るところから始めます。
何となく Japan East にデプロイしました。とりあえず 2 units を使うようにしてあります。
サンプルアプリケーションは懐かしい Stock Ticker を使いました。空の ASP.NET プロジェクトに NuGet からインストールするだけなので非常に楽です。同時に先ほどのライブラリもインストールします。
SignalR Service を使うための設定は OWIN Startup で呼び出されている MapSignalR
を MapAzureSignalR
に変更するだけです。この辺りは Core SignalR と同じような感じです。
public class Startup { public void Configuration(IAppBuilder app) { // ↓ は要らない //app.MapSignalR(); // applicationName は適当で良い app.MapAzureSignalR(GetType().FullName); } }
最後に Azure Portal からコピーしてきた SignalR Service の接続文字列を Web.config に追加します。
名前はデフォルトだと Azure:SignalR:ConnectionString
が使われるので、今回はその名前で追加しました。MapAzureSignalR
の呼び出し時に明示的に設定も出来るみたいです。
これで SignalR Service を使う設定は完了です。Core SignalR と同じぐらい簡単に設定できました。
最後にちゃんと SignalR Service が使われているのか動作を確認するわけですが、分かりやすいのは WebSocket の接続先が SignalR Service になっているかどうかです。
無事に接続先が SignalR Service になっていることが確認出来ました。簡単でしたね。
とはいえ、個人的には ASP.NET Core SignalR に移行が可能な場合は、そっちに移行した方が良いと思っています。今回の ASP.NET SignalR への対応のために SignalR 自体もバージョンが上がっていて、地味にプロトコルバージョンが 2.0 に変わっています。
なので、C# / JavaScript 以外のクライアントを使っていると動作しない可能性が高いです。注意しましょう。