以前建立SignalR服務端是基於Web應用程序而言的。那麼能不能把SignalR服務端作成控制檯應用程序、Winform或windows服務呢?html
答案是確定的。windows
以前儘管看起來好像是IIS和ASP.Net構成託管SignalR服務的惟一環境,但事實上並不是如此,不少狀況下采用的並不是是IIS和ASP.NET。app
如今,在這裏以控制檯程序爲例,將SignalR服務端創建在控制檯程序裏。ide
如何在控制檯程序實現基於Hub或持久性鏈接的SignalR服務呢,首先安裝下面的包:ui
install-package Microsoft.AspNet.SignalR.SelfHost編碼
安裝完成後,項目會自動加載須要引用的庫文件。spa
而後在控制檯的Program類中code
1 using System.Linq; 2 using System.Text; 3 using System.Threading.Tasks; 4 5 namespace ConsoleApplication1 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 using (WebApp.Start<Startup>("http://localhost:8888/"))//啓動服務,訪問路徑在這裏配置。 12 { 13 Console.WriteLine("Server running at http://localhost:8888/"); 14 Console.ReadLine(); 15 } 16 } 17 } 18 }
在上面的代碼中,咱們能夠看出須要一個啓動類Starup,這個類與咱們以前創建持久性鏈接或Hub同樣。orm
1 using System; 2 using System.Threading.Tasks; 3 using Microsoft.Owin; 4 using Owin; 5 6 [assembly: OwinStartup(typeof(Startup))] 7 8 public class Startup 9 { 10 public void Configuration(IAppBuilder app) 11 { 12 app.MapSignalR<TestConnection>("/test");//配置指定持久性鏈接類,同時映射訪問路徑後面有用 13 } 14 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Threading.Tasks; 5 using System.Web; 6 using Microsoft.AspNet.SignalR; 7 8 public class TestConnection : PersistentConnection 9 { 10 protected override Task OnConnected(IRequest request, string connectionId) 11 { 12 return Connection.Send(connectionId, "Welcome!"); 13 } 14 15 protected override Task OnReceived(IRequest request, string connectionId, string data) 16 { 17 Console.WriteLine(connectionId+"============="+data);//服務端接受消息 18 return Connection.Broadcast(data);//將消息發送給全部客戶端 19 } 20 }
以上的方式是在控制檯裏面創建SignalR服務,以持久性鏈接的方式進行編碼的。htm
固然,咱們也能夠利用Hub來設置服務端,方式與以前的同樣。
SignalR的服務端創建好後,咱們須要創建一個客戶端,以前,咱們的客戶端都是在html中以js的方式進行創建鏈接的。那麼如今,咱們將客戶端也創建爲控制檯應用程序。
首先創建一個控制檯應用程序,而後安裝以下包:
install-package microsoft.aspnet.signalr.client
而後在Program類中的Main方法中編寫:
1 using Microsoft.AspNet.SignalR.Client.Transports; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using Microsoft.AspNet.SignalR; 8 using Microsoft.AspNet.SignalR.Client; 9 namespace ConsoleApplication2 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 try 16 { 17 //GlobalHost 18 var connection = new Connection("http://localhost:8888/test");//服務端配置好的訪問路徑以及持久性鏈接映射路徑 19 20 connection.Start();//開始鏈接 21 connection.Received += Connection_Received;//配置接受消息事件 22 string str = ""; 23 while ((str = Console.ReadLine()) != "") 24 { 25 connection.Send(str);//發送消息 26 } 27 28 } 29 catch (Exception ex) 30 { 31 32 Console.WriteLine(ex.Message); 33 } 34 Console.Read(); 35 } 36 37 private static void Connection_Received(string obj) 38 { 39 Console.WriteLine(obj); 40 } 41 } 42 }