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

  1. 开发(代码下载

    新建一个ASP.NET Web项目,项目类型为MVC,将认证模式改为无身份认证。在程序包管理控制台输入如下语句,安装SignalR
     
    install-package Microsoft.AspNet.SignalR

    为了便于管理,在项目中添加一个名为Hubs的文件夹,在文件夹上右键单击,选择Visual C#  >> Web >> SignalR >>SignalR 集线器类 ( V2 ),命名为ChatHub,这个类将是我们所有客户端调用的Hub服务,修改代码,代码如下:
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    
    namespace SignalRChat_Part2.Hubs
    {
        public class ChatHub : Hub
        {
            public void Send(string name, string message)
            {
                //调用所有客户端的addNewMessageToPage function
                Clients.All.addNewMessageToPage(name, message);
            }
        }
    }

    接着,创建OWIN Startup 类,修改代码,代码如下:
     
    using System;
    using System.Threading.Tasks;
    using Microsoft.Owin;
    using Owin;
    
    [assembly: OwinStartup(typeof(SignalRChat_Part2.Startup))]
    
    namespace SignalRChat_Part2
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
                app.MapSignalR();
            }
        }
    }
    

    然后,在HomeController中新增一个Action,命名为Chat,代码如下:
     
    public ActionResult Chat()
    {
       return View();
    }

    最后,创建Chat 视图,修改试图代码,代码如下:
     
    @{
        ViewBag.Title = "Chat";
    }
    
    <h2>Chat</h2>
    <div class="container">
        <input type="text" id="message" />
        <input type="button" id="sendmessage" value="Send" />
        <input type="hidden" id="displayname" />
        <ul id="discussion">
        </ul>
    </div>
    @section scripts {
        <!--注意:这里的jQuery脚本已经在模板页_Layout.cshtml中引用-->
        <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
        <!--signalr自动生成的脚本-->
        <script src="~/signalr/hubs"></script>
        <script>
            $(function () {
                //声明hub代理
                var chat = $.connection.chatHub;
                //创建后端要调用的前端function
                chat.client.addNewMessageToPage = function (name, message) {
                    //将信息添加到页面上
                    $('#discussion').append('<li><strong>' + htmlEncode(name) + '</strong>:' + htmlEncode(message) + '</li>');
                };
                //获取输入的名称
                $('#displayname').val(prompt('Enter your name:', ''));
                //将焦点定位在信息输入框中
                $('#message').focus();
                //开启链接
                $.connection.hub.start().done(function () {
                    $('#sendmessage').click(function () {
                        //调用后台hub的Send方法
                        chat.server.send($('#displayname').val(), $('#message').val());
                        //清除发送的内容,并将焦点定位到信息框
                        $('#message').val('').focus();
                    });
                });
                //该function防止JS注入
                function htmlEncode(value) {
                    var encodeValue = $('<div/>').text(value).html();
                    return encodeValue;
                }
            });
        </script>
    }

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵叔哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值