• SignalR 2.x入门(二):SignalR在MVC5中的使用


      1. 开发(代码下载

        新建一个ASP.NET Web项目,项目类型为MVC,将认证模式改为无身份认证。在程序包管理控制台输入如下语句,安装SignalR
        [csharp] view plain copy
         
        1. <span style="font-size:14px;">install-package Microsoft.AspNet.SignalR</span>  

        为了便于管理,在项目中添加一个名为Hubs的文件夹,在文件夹上右键单击,选择Visual C#  >> Web >> SignalR >>SignalR 集线器类 ( V2 ),命名为ChatHub,这个类将是我们所有客户端调用的Hub服务,修改代码,代码如下:
        [csharp] view plain copy
         
        1. using System;  
        2. using System.Collections.Generic;  
        3. using System.Linq;  
        4. using System.Web;  
        5. using Microsoft.AspNet.SignalR;  
        6.   
        7. namespace SignalRChat_Part2.Hubs  
        8. {  
        9.     public class ChatHub : Hub  
        10.     {  
        11.         public void Send(string name, string message)  
        12.         {  
        13.             //调用所有客户端的addNewMessageToPage function  
        14.             Clients.All.addNewMessageToPage(name, message);  
        15.         }  
        16.     }  
        17. }  

        接着,创建OWIN Startup 类,修改代码,代码如下:
        [csharp] view plain copy
         
        1. using System;  
        2. using System.Threading.Tasks;  
        3. using Microsoft.Owin;  
        4. using Owin;  
        5.   
        6. [assembly: OwinStartup(typeof(SignalRChat_Part2.Startup))]  
        7.   
        8. namespace SignalRChat_Part2  
        9. {  
        10.     public class Startup  
        11.     {  
        12.         public void Configuration(IAppBuilder app)  
        13.         {  
        14.             // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888  
        15.             app.MapSignalR();  
        16.         }  
        17.     }  
        18. }  

        然后,在HomeController中新增一个Action,命名为Chat,代码如下:
        [csharp] view plain copy
         
        1. public ActionResult Chat()  
        2. {  
        3.    return View();  
        4. }  

        最后,创建Chat 视图,修改试图代码,代码如下:
        [html] view plain copy
         
        1. @{  
        2.     ViewBag.Title = "Chat";  
        3. }  
        4.   
        5. <h2>Chat</h2>  
        6. <div class="container">  
        7.     <input type="text" id="message" />  
        8.     <input type="button" id="sendmessage" value="Send" />  
        9.     <input type="hidden" id="displayname" />  
        10.     <ul id="discussion">  
        11.     </ul>  
        12. </div>  
        13. @section scripts {  
        14.     <!--注意:这里的jQuery脚本已经在模板页_Layout.cshtml中引用-->  
        15.     <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>  
        16.     <!--signalr自动生成的脚本-->  
        17.     <script src="~/signalr/hubs"></script>  
        18.     <script>  
        19.         $(function () {  
        20.             //声明hub代理  
        21.             var chat = $.connection.chatHub;  
        22.             //创建后端要调用的前端function  
        23.             chat.client.addNewMessageToPage = function (name, message) {  
        24.                 //将信息添加到页面上  
        25.                 $('#discussion').append('<li><strong>' + htmlEncode(name) + '</strong>:' + htmlEncode(message) + '</li>');  
        26.             };  
        27.             //获取输入的名称  
        28.             $('#displayname').val(prompt('Enter your name:', ''));  
        29.             //将焦点定位在信息输入框中  
        30.             $('#message').focus();  
        31.             //开启链接  
        32.             $.connection.hub.start().done(function () {  
        33.                 $('#sendmessage').click(function () {  
        34.                     //调用后台hub的Send方法  
        35.                     chat.server.send($('#displayname').val(), $('#message').val());  
        36.                     //清除发送的内容,并将焦点定位到信息框  
        37.                     $('#message').val('').focus();  
        38.                 });  
        39.             });  
        40.             //该function防止JS注入  
        41.             function htmlEncode(value) {  
        42.                 var encodeValue = $('<div/>').text(value).html();  
        43.                 return encodeValue;  
        44.             }  
        45.         });  
        46.     </script>  
        47. }  
         

        运行,效果如图:
      2. 需注意的

        JS在调用Hub时,Hub的首字母小写,不管后端代码是大写还是小写,JS调用时首字母均小写,除非后台Hub类上已经定义了HubName 属性(如:[HubName("ChatHub")]),这种情况下,JS调用Hub时,根据HubName属性定义的名称走。

  • 相关阅读:
    root登录出现“sorry, that didn't work please try again”
    【自适应辛普森】积分计算
    【CF1553F】Pairwise Modulo
    调和级数的复杂度
    CF 1600-2000 的思维题
    中超热身赛(2021湘潭全国邀请赛-重现)补题
    牛客2021年度训练联盟热身训练赛第一场(讲题)
    新知识-Queue_循环队列
    新知识-valueOf(Leetcode 1556_千位分隔符)
    新知识-位运算(Leetcode 217_存在重复元素)
  • 原文地址:https://www.cnblogs.com/valu/p/8007930.html
Copyright © 2020-2023  润新知