十年河东,十年河西,莫欺少年穷

学无止境,精益求精

首先分享下源码:https://download.csdn.net/download/wolongbb/12768075

一个在线聊天室,比本篇博客更齐全

截图如下:

SignalR 简易聊天室+SignalR如何跨域

环境:VS2012或以上,Frm版本4.5或以上,我用的是4.5.2

1、在 Visual Studio 中,创建一个 ASP.NET MVC Web 应用程序。

2、右键项目,添加hub类,并命名为:ChatHub【添加后,项目会自动引用SignalR的相关DLL程序集及会在Scripts文件中生成SignalR客户端JS文件】

SignalR 简易聊天室+SignalR如何跨域

JS如下:

SignalR 简易聊天室+SignalR如何跨域

 ChatHub 类的代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using System.Threading.Tasks;

namespace SignalRTx.ChatHubServer
{
    public class ChatHub : Hub
    {
        public static List<string> Connectedlst = new List<string>();
        /// <summary>
        /// 当客户端连接时
        /// </summary>
        /// <returns></returns>
        public override Task OnConnected()
        {
            var ConnectionId = Context.ConnectionId;
            Connectedlst.Add(ConnectionId);
            return base.OnConnected();
        }
        /// <summary>
        ///  当客户端断开连接时,例如用户关闭页面,刷新页面
        /// </summary>
        /// <param name="stopCalled"></param>
        /// <returns></returns>
        public override Task OnDisconnected(bool stopCalled)
        {
            var ConnectionId = Context.ConnectionId;
            Connectedlst.Remove(ConnectionId);
            return base.OnDisconnected(stopCalled);
        }
        /// <summary>
        /// 当客户端重连时
        /// </summary>
        /// <returns></returns>
        public override Task OnReconnected()
        {
            var ConnectionId = Context.ConnectionId;
            if (!Connectedlst.Contains(ConnectionId))
            {
                Connectedlst.Add(ConnectionId);
            }
            return base.OnReconnected();
        }

        /// <summary>
        /// 这是一组广播消息 所有客户端均可收到此消息
        /// broadcastMessage 是客户端的一个JS方法,也是回调函数,用于更新客户端
        /// send 则是服务端的方法,用于客户端调用
        /// </summary>
        /// <param name="name"></param>
        /// <param name="message"></param>
        public void Send(string name, string message)
        {
            Clients.All.broadcastMessage(name, message);
        }
    }
}
View Code

相关文章: