學習使用SignalR

一、建立空白的控制檯程序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

 

相關文章
相關標籤/搜索