zoukankan      html  css  js  c++  java
  • 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属性定义的名称走。

  • 相关阅读:
    [HNOI2008]玩具装箱toy(dp+斜率优化)
    hdu 4597 Play Game(记忆化搜索)
    下载文件,ie文件名称乱码问题
    HDU 2138 How many prime numbers
    Codeforces Round #277 (Div. 2)---A. Calculating Function (规律)
    MapReduce-MulitipleOutputs实现自己定义输出到多个文件夹
    EFM8单片机与I2C外设通信
    linux杂谈(十一):LDAPserver的搭建
    Redis命令学习-string类型操作
    Java 实现单链表反序
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778311.html
Copyright © 2011-2022 走看看