# SignalRMvcChat
**Repository Path**: anayigeren/SignalRMvcChat
## Basic Information
- **Project Name**: SignalRMvcChat
- **Description**: No description available
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-01-01
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### ASP.Net MVC SignalR的应用
> 最近做的一个MVC项目有个模块是要使用即时通信实现弹幕效果。既要考虑通信的实时性也要考虑服务器性能和资源消耗,所幸项目对浏览器的版本没有要求。所以我最先想到用WebSocket来实现,在查询资料时, 看到 **SignalR** 这个技术,也就是本专题所讨论的对象。在拜读了 [史上最全面的SignalR系列教程-认识SignalR](https://blog.csdn.net/chinahuyong/article/details/98873807) ,算是对 SignalR有一个简单的认识,SignalR 是 .NET平台为我们提供的一种简洁高效智能的实时信息交互技术,SignalR 比 WebSocket 还要简单,这简直是我的福音。所以我直接一个Demo开始尝试。
### SignalR
关于SignalR的介绍这边就不多赘述,可以去看我上面说的这篇博文[史上最全面的SignalR系列教程-认识SignalR](https://blog.csdn.net/chinahuyong/article/details/98873807) 或者直接看Microsoft文档 [Introduction to SignalR](https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr),SignalR可用于任何即时性的功能;
### Demo :使用SignalR和MVC 5实现实时聊天
通过第一部分的介绍,相信大家对SignalR有初步的认识,接下来直接上手一个Demo来看看(我的开发环境:VS2019 + .net 4.6.2 + MVC 5)。步骤参考微软教程 [Tutorial: Real-time chat with SignalR 2 and MVC 5](https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc)。
1. 使用Visual Studio 2019 创建一个MVC工程-**SignalRMvcChat**
2. 选择**MVC**,然后身份验证上,选择“**无身份验证**”,然后单击“**创建**”。
3. 在项目上右击-**添加新建项**,选择 **Installed** > **Visual C#** > **Web** > **SignalR and then** 选择 **SignalR Hub Class (v2)**.
4. 将类命名为ChatHub并将其添加到项目中。 此步骤将创建ChatHub.cs集线器类文件,并将一组支持SignalR的脚本文件和程序集引用添加到项目:

5. 用以下代码替换新建的ChatHub.cs类文件中的代码:
``` C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRMvcChat
{
public class ChatHub : Hub
{
public void Send(string name, string message)
{
Clients.All.addNewMessageToPage(name, message);
}
}
}
```
6. 在项目上,右键选择 **添加**>**类**,命名为**Startup.cs**,并用以下代码替换新建的Startup.cs类文件中的代码:
``` C#
using Owin;
using Microsoft.Owin;
[assembly: OwinStartup(typeof(SignalRMvcChat.Startup))]
namespace SignalRMvcChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
}
```
> 注意: SignalR 框架使用Owin组件,每一个使用的OWin组件的Web框架都需要一个Startup入口类,用来声明OWin组件:
1.项目会自动扫描程序集根下的名为Startup的类,来作为入口类;
2.通过添加 [assembly: OwinStartup(typeof(SignalRChat.Startup))] 标签标记入口类;
3.如果你的启动类不在当前命名空间下,需要在Web.config中添加节点: