MVC3 使用SingalR后台推送数据

本文档介绍了如何在ASP.NET MVC3应用中使用SignalR进行后台数据推送。首先定义了一个名为MySingal的Hub类,通过`SendMessage`方法从前台接收并传递消息到所有客户端。接着在`Startup`类中配置SignalR,确保其正常工作。为了实现实时推送,创建了一个`SingalRSend`线程类,它在后台周期性地调用`SendMessage`方法发送消息。最后,在HTML页面中,利用jQuery和SignalR的JavaScript库建立连接,实现消息的接收和显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


namespace DBDLL.SingalRS
{
    [HubName("mysingal")]//使用小写,试过使用大写,但是在html页会出错
    public class MySingal : Hub
    {
       


        public void SendMessage(string name, string message)
        {


        //因为在后台调用,所以要这样,否则会出错,提示Using a Hub instance not created by the HubPipeline is unsupported</pre> 
                var hubContext = GlobalHost.ConnectionManager.GetHubContext<MySingal>(); 
                hubContext.Clients.All.addNewMessageToPage(name, message); //用户调用客户端的函数 

}
        public void Init() { }
}


//3.同在这个文件夹下, 建立Startup类,实现SingalR的注册
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using Microsoft.Owin;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;




[assembly: OwinStartup(typeof(DBDLL.SingalRS.Startup))]




namespace DBDLL.SingalRS
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}
//4. 因为要从后台推送数据,所以在后台启动了一个线程来向前台发送数据。新建一个类封装线程。
using DBDLL.SingalRS;
using Microsoft.AspNet.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;


namespace DBDLL.Models
{
    public class SingalRSend
    {
        private Thread m_hreadCycle = null;
        private MySingal m_MySingal = null;
        public SingalRSend()
        {
            m_MySingal = new MySingal();
            m_hreadCycle = new Thread(ThreadCycle);
            m_hreadCycle.Start();
            m_hreadCycle.IsBackground = true;
        }


        private int m_Index = 0;
        private void ThreadCycle()
        {
           
            while (true)
            {
                m_Index++;
                m_MySingal.SendMessage("tval1", "this is a msg test<>" + m_Index.ToString());
                Thread.Sleep(1000);
            }
        }


        ~SingalRSend()
        {
            m_hreadCycle.Abort();
        }
    }
}
 //   5. 关于线程的启动,在Global.asax的Application_Start() 函数创建线程类的事例。这样网站启动时线程就启动了。


//6. 前端html页面。需要注意的是 Jquery 必须要在jquery.signalR-2.2.1.min.js前面被引用,
//<script src="../../signalr/hubs"></script>这个在工程里面没找到,但是文档里面让这么写,就写了。 var chat = $.connection.mysingal;这里的mysingal就是2 中建立的类的名字,不过必须要小写才行,原因上面说过了。


    <script src="../../Scripts/jquery.signalR-2.2.1.min.js"></script>
        <script src="../../signalr/hubs"></script>
        <script>
            $(function () {
                // Reference the auto-generated proxy for the hub.  
                var chat = $.connection.mysingal;
                // Create a function that the hub can call back to display messages.
                chat.client.addNewMessageToPage = function (name, message) {
                    // Add the message to the page. 
                    $('#UName').val(name + ":" + message);
                };




                $.connection.hub.start().done(function () {
                    chat.server.init();
                });
            });


    </script>
//这样就 ok了。之前说过了因为很菜,可能会有一些问题,欢迎指正
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值