最近は Web API よりも SignalR で API を用意したほうが使い勝手がいいと思っているんですが、やはり SignalR だけでは完結できないことのが多いです。
なので、今回は ASP.NET MVC と SignalR を組み合わせて使う方法について書いていきます。
まず大前提として、SignalR は Web Forms や MVC に依存するコンポーネントではないことです。つまり Web Forms・MVC・Web API のどれとも組み合わせて使うことができます。
Install-Package SignalR
このコマンドを実行するだけで SignalR は使えるわけです。
しかし、SignalR の Hub や PersistentConnection は SignalR のランタイムによって自動的にアクティベートされるわけで、外部からインスタンスを取得することは非常に困難です。
// このクラスは SignalR が自動的にアクティベートする public class SampleHub : Hub { }
SignalR の機能でもサーバ側で、さらに Hub や PersistentConnection の外部から使いたいものといえば、当然ながらクライアントへのプッシュですね。それに関しては SignalR は ConnectionManager を提供することで、外部から使用可能になっています。
public class HomeController : Controller { public ActionResult PushHub() { // SampleHub の IHubContext を取得 var context = GlobalHost.ConnectionManager.GetHubContext<SampleHub>(); // クライアントのメソッドを呼び出す context.Clients.someMethod(); } }
PersistentConnection の場合は GetConnectionContext
これを使えば、例えば MVC アプリケーションのフォームでデータが登録された時に、SignalR を使ってその場で反映、といったようなことが出来るわけです。