asp.net mvc使用Signalr

 注意,是asp.net mvc项目,不是core,代码不一样。

1. 在nuget安装Microsoft.AspNet.SignalR,安装最新版本就行(只要.net framework支持)。

2. 在nuget安装Microsoft.Owin,同样最新版本(有时项目里默认就有,但是旧版本并带有感叹说弃用之类的,更新到最新版本就行)

安装完上面两个后,项目文件里会多了个script文件夹,里面就是我们要用到的js文件。

在项目中添加两个文件Startup.cs和MyHub.cs(位置自己决定)。

Startup.cs

public class Startup
    { 
        public void Configuration(IAppBuilder app)
        {
            var hubConfiguration = new HubConfiguration();
            hubConfiguration.EnableDetailedErrors = true;  //启用详细日志,方便调试
            app.MapSignalR();
        } 
    }

MyHub.cs

 public class MyHub : Hub
    { 
        public override Task OnDisconnected(bool stopCalled)
        {           
            return base.OnDisconnected(stopCalled);
        }
 
        public void Send(string msg)
        {
            
        } 
    }

在前端页面引用三个js文件

<script src="~/jquery-3.4.1.min.js"></script>
<script src="~/jquery.signalR-2.4.3.min.js"></script>
<script src="~/signalr/hubs"></script>

并加上js代码

 $(function () {    
            var myHub = $.connection.myHub;
            //$.connection.hub.logging = true;
            myHub.client.disconnet = function () { };
            $.connection.hub.error(function (error) {
                console.log('SignalR Error: ' + error);
            });
            //{ transport: 'webSockets' }
            $.connection.hub.start().done(function () {
                myHub.server.send('test');
            });

        });

按上面操作,就可以正常连接到服务器收到信息了。

下面列举下我碰到的坑:

1. 一直提示websocks协议连接不上,而自动降级使用SSE(Signalr有三种协议,分别是 Web Socket, Server Sent Events 和Long Polling,一种连接不上,就自动降级使用下一种)。这个问题一般会是:没有安装websocket,按下面勾选上就行。

 

2. 需要在Web.config中加上(注意使用自己项目版本)。

 <system.web> 
    <httpRuntime targetFramework="4.7.2" />
  </system.web>

3. 另外一个是遇到OnDisconnected没有触发,这个有点神奇,必须在前端随便加一个函数给服务端可调用的就行,像上面代码中的 myHub.client.disconnet = function () { };没其它实际意义,但加上就行。

4. 有时连接不上想看客户端日志,需要前端加上代码$.connection.hub.logging = true; 以chrome为例,F12打开DevTools,切换到Console,右边的Default Levels中勾选中Verbose,后才会显示连接日志。

 

posted on 2025-05-24 13:32  tudou0123  阅读(61)  评论(0)    收藏  举报

导航