一、建立空白的控制檯程序jquery
二、添加兩個NuGet包(Microsoft.AspNet.SignalR.SelfHost、Microsoft.Owin.Cors、Topshelf)Topshelf用於快捷建立windows服務web
三、添加Myservice服務類windows
using Microsoft.AspNet.SignalR.Hosting; using Microsoft.Owin.Hosting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BCode_Framework_ConsoleSignalR { public class MyService { private IDisposable SignalR { get; set; } private string SignalRUrl = string.Empty; public MyService() { SignalRUrl = "http://127.0.0.1:1010"; Console.WriteLine("獲取配置:" + SignalRUrl); } public bool Start() { try { Console.WriteLine("事實消息服務運行在:" + SignalRUrl); SignalR = WebApp.Start(SignalRUrl); return true; } catch { return false; } } public bool Stop() { if (SignalR != null) { SignalR.Dispose(); } return true; } } }
四、設置Program文件中Main類服務器
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Owin; using Microsoft.Owin.Hosting; using Topshelf; namespace BCode_Framework_ConsoleSignalR { class Program { static void Main() { HostFactory.Run(x => { //設置服務窗口 x.Service<MyService>(sc => { sc.ConstructUsing(service => new MyService()); sc.WhenStarted(service => service.Start()); sc.WhenStopped(service => service.Stop()); }); x.SetServiceName("CheckService");//服務名稱 x.SetDescription("Check");//服務描述 x.SetDisplayName("Check Service");//服務顯示的名稱 x.RunAsLocalSystem();//以本地系統帳戶啓動服務 }); #region 爲了方便調試 StartOptions options = new StartOptions(); //服務器Url設置 options.Urls.Add("http://127.0.0.1:1010"); //Server實現類庫設置 options.ServerFactory = "Microsoft.Owin.Host.HttpListener"; //以當前的Options和Startup啓動Server using (WebApp.Start(options)) { Console.WriteLine("Owin Host/Server started,press enter to exit it..."); //顯示啓動信息,經過ReadLine駐留當前進程 Console.ReadLine(); }//Server在Dispose中關閉 #endregion } } }
五、建立SignalR集線器類 重寫了一個鏈接方法和建立一個客戶端方法app
using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Hubs; using System; using System.Threading.Tasks; namespace BCode_Framework_ConsoleSignalR.Hubs { //定義客戶端調用服務端方法的名稱,若是沒有定義注意客戶端會自動把服務端方法的首字母改成小寫 [HubName("serviceMonitorHub")] public class ServiceMonitorHub:Hub { //當客戶端與服務器創建鏈接後執行的方法 public override Task OnConnected() { //獲取客戶端ID Console.WriteLine("{0}已鏈接", Context.ConnectionId); //服務端往客戶端發送數據ServerSendData方法爲客戶端定義的方法 Clients.Client(Context.ConnectionId).ServerSendData("服務端與客戶端:" + Context.ConnectionId + "成功創建鏈接!"); return base.OnConnected(); } //客戶端執行服務器端的方法 [HubMethodName("ClickSendData")] public void ClickSendData(string msg) { Console.WriteLine("接收到客戶端" + Context.ConnectionId + "發送的數據:" + msg); } } }
六、添加Startup啓動類ide
using Microsoft.Owin.Cors; using Owin; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BCode_Framework_ConsoleSignalR { class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR(); } } }
七、客戶端調用測試
web端引用NuGet包(Microsoft.AspNet.SignalR.JS)ui
<script src="~/Scripts/jquery-1.6.4.min.js"></script> <script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script> <script src="http:127.0.0.1:1010/SignalR/Hubs"></script> <div> <input id="txt_value" type="text" /> <input id="btn_send" type="button" value="發送" /> <label id="lbl_msg"></label> </div> <script> var KeyValue = ""; var app = null; var Connectioned = false; $(function () { if (!Connectioned) { $.connection.hub.url = "http:127.0.0.1:1010/SignalR/Hubs"; app = $.connection.serviceMonitorHub; } if (app != null) { app.client.ServerSendData = function (msg) { $("#lbl_msg").append("<br/>" + msg); } $.connection.hub.start() .done(function () { $('#btn_send').click(function () { connected = true; console.log('Now connected, connection ID=' + $.connection.hub.id); app.server.ClickSendData($("#txt_value").val()); }) }) .fail(function () { console.log('Not fount connect'); }) } }) </script>
八、測試結果url