利用控制台承載SignalR作為服務端、及第三方推送信息


一 首先建立一個控制台需要引用一些組件

特別要注意引用Microsoft.Owin.Host.HttpListener別忘了這個組件,不引用他可能程序正常運行不會報錯,但服務器一直開啟失敗(我之前就是掉過這個坑了)

二、建立一個控制台程序且建立集線器類MsgHub繼承Microsoft.AspNet.SignalR.Hub

 

三、初始化服務端

四、調用InitSinalR方法即可啟用成功服務端

     到此完成服務端程序,客戶端只需要請求上面地址即可運行

五、寫到這只是完成了客戶和服務消息傳遞,怎么將第三方消息發到客戶端呢???

       其實Microsoft.AspNet.SignalR里面有一個全局類GlobalHost,通過這個可以全局找到我們想要的hub

      如: var hub = GlobalHost.ConnectionManager.GetHubContext<MsgHub>(); 這樣我們就可以在任何地方調用hub方法

 

 六、還使用了Topshelf組件,這樣可以通過window服務部署程序了

    

 1 namespace SFBR_MsgForwardingService
 2 {
 3     class Program
 4     {  
 5         static void Main(string[] args)
 6         {    
 7             HostFactory.Run(x =>                                
 8             {
 9                 x.Service<Startup>(s =>                       
10                 {
11                     s.ConstructUsing(name => new Startup());     
12                     s.WhenStarted(tc => tc.Start());              
13                     s.WhenStopped(tc => tc.Stop());               
14                 });
15                 x.RunAsLocalSystem();                         
16 
17                 x.SetDescription("SFBR消息轉發服務");      
18                 x.SetDisplayName("SFBR消息轉發服務");                    
19                 x.SetServiceName("SFBR_MsgForwardingService");                    
20             });
21         }
22     }
23 }
View Code

七、客戶端調用

     1.開啟服務端,服務器運行正常后,可以通過瀏覽器測試是否正常 http://localhost:6178/signalr/hubs,顯示以下界面說明正常

 

  2.需要引用 <script src="Scripts/jquery.signalR-2.2.2.min.js"></script>

  3.通過ajax請求js數據,請求到數據后先注冊注冊客戶端方法,再開啟連接成功,

    

  <script type="text/javascript">
        var chat;
        //連接方法
        var connect = function (url, userID) {
          $.ajax({
                url: url + "/hubs",
                type: "get",
                dataType: "text",
                success: function (data) {
                    eval(data);
                    console.log("開始連接")
                    $.connection.hub.url = url;
                    $.connection.hub.qs = { "userId": userID };
                    chat = $.connection.msgHub;
                     // 注冊客戶端方法
                    registerClient();
                    // 連接成功后注冊服務器方法
                    $.connection.hub.start().done(function () {
                        console.log(url + "連接成功");
                        $('#sendmessage').click(function () {
                            chat.server.send($('#displayname').val(), $('#message').val());
                            $('#message').val('').focus();
                        })
                    });
                    //斷開連接后
                    $.connection.hub.disconnected(function () {
                        console.log("已斷開連接");

                    });
              
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    isLoaded = -1;
                },
            });
        }
        $(function () {
            var userId = prompt('Enter your name:', '');
            //Set the hubs URL for the connection
            connect("http://192.168.137.112:6178/signalr",userId);
        });
         // 注冊客戶端方法
       var  registerClient=function () {
            if (chat) {
                //接收消息1
                   chat.client.addMessage = function (name, message) {
                       console.log(message);
                       var encodedName = $('<div />').text(name).html();
                       var encodedMsg = $('<div />').text(message).html();
                        $('#discussion').append('<li><strong>' + encodedName
                            + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
                       
                    };
                 //接收消息2
                  chat.client.allInfo = function (message) {
                       console.log(message);
                        var encodedMsg = $('<div />').text(message).html();
                      
                        $('#discussion').append('<li><strong>'
                            + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
                   }
            }
            }
    </script>
View Code

  4.客戶端代碼調用不具體說明,比較簡單,注冊客戶端方法的時候方法名稱首字母必須小寫

八、因文檔功底比較差,具體實現請看代碼,完整代碼實例 github地址:https://github.com/lxshwyan/SFBR_MsgForwardingService.git


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM