ASP .NET SignalRというだけあって、IIS上で動くASP.NETの一部だと思い込んでいたらこれはちょっと違う。
IIS上と限定せずに、普通のWindowsサービスとかの上で動きます。
便利
どんなことができるかというと、今までは、TCPとかWCFで接続していたとこにSignalRが使えます。
SignalR Self-Host
そしてやってみよう。やはり日本語がない。まぁ英語サイトでも簡単なんでわかるけど。
【準備するもの】
- .NET4.5のコンソールアプリケーションプロジェクト
【使用するパッケージ】
【手順概要】
- パッケージインストール
- SelfHostサーバー作成
パッケージインストール
PM> Install-Package Microsoft.AspNet.SignalR.SelfHost -Version 2.2.0 PM> Install-Package Microsoft.Owin.Cors
SelfHostサーバー作成
なんとこれだけ、たった20行!
using System; using Owin; using Microsoft.Owin.Hosting; using Microsoft.Owin.Cors; public class SignalrHostServer { private IDisposable server; public void Start() { server = WebApp.Start<Startup>("http://localhost:9000/signalr/"); Console.WriteLine("START SignalrHostServer "); } public void Stop() { server.Dispose(); } private class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR(); } } [HubName("sampleHub")] public class SampleHub : Hub { static int valueCount; public void GetValue() { valueCount += 1; base.Clients.All.onUpdate(valueCount); } } }
server = WebApp.Start<Startup>("http://localhost:9000/signalr/");
待ち受けIPとポートは任意のものに変えてください。
アドレス末尾の”signalr/”は任意の文字列でOKです。
app.UseCors(CorsOptions.AllowAll);
クロスドメイン接続のサポートを有効にします。
通常は、セキュリティ的にNGとなっているクロスドメイン接続ですがそれを回避するためにCROS(JSONPもありますがいつ、新しいブラウザがサポートしなくなるかわからない状況)を使用します。
クロスドメイン接続をサポートしない場合には、 ”Microsoft.Owin.Cors.3.0.0”のパッケージは不要です。
ではサーバーを起動しましょう。
using System; class Program { static SignalrHostServer host = new SignalrHostServer(); static void Main(string[] args) { host.Start(); Console.WriteLine("何かキーを押すと終了します。"); Console.ReadKey(); host.Stop(); } }
(∩´∀`)∩ワーイ
これで、サーバーとクライアントの通信も簡単簡単
しかも、デスクトップアプリとWebアプリの両方を対象にできるっていいじゃない。