asp.net webapi使用signalR 前后端分离方案

最近在维护一个稍老一些的项目,项目当时使用webapi2写的,但是并没有用上及时推送功能,现在要加上,只好在老的项目基础上做文章,目前市面上asp.net webapi的signalr的前后端分离方案不是很多,质量也不敢保证,经过一番研究,总算走通了.把简单的实现放到这里,为自己和后面的人铺好路.

安装nuget包
Microsoft.AspNet.SignalR
配置startup
Startup 应用signalR
写一个hub
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace lingcheng_web_api.SignalR
{
    [HubName("RepairHub")]
    public class RepairHub : Hub
    {
        public void Hello()
        {
            Clients.All.hello();
        }

        public void Send(string message)
        {
            var name = Guid.NewGuid().ToString().ToUpper();
            Clients.All.SendMessage(name, message);
        }

        public void showMessage(object message)
        {
            Clients.All.SendMessage(message.ToString());
        }
     
    }
}
在controller中使用
        /// 
        /// 触发hub的api
        /// 
        /// request
        /// message
        [AllowAnonymous]
        [Route("show/hub"), HttpGet]
        public HttpResponseMessage GetMessage(HttpRequestMessage request)
        {
               var hub = GlobalHost.ConnectionManager.GetHubContext();
                //注意这里的showMessage 就是对RepairHub下定义的showMessage方法调用,同样前端也是调用这个方法
                hub.Clients.All.showMessage("这里面可以放入任意对象,前台可以收到此内容");
                return request.CreateResponse(HttpStatusCode.OK,);
        }

api端就完成了,

处理web端




    
    
    
    signalr
    
    
    
    



    
signalr

将此页面放到api项目的启动根目录下,项目启动访问该页面即可
注意因为没有做cors跨域处理,放到别的url下会出错.如果要做跨域处理,可以在startup中加入

app.UseCors(CorsOptions.AllowAll);

不知为何我的项目就是不识别这段代码,如有哪位大佬知道为何,烦劳写在评论里,为他人借鉴,谢谢

效果:
signalr web端接收数据
总结

首先安装signalR包,然后再webapi的startup配置,编写hub总线,最后在controller中调用处理.
前端(web)应用必要文件jquery.js,signalr.js以及weibapi中signalr动态生成的hubs文件, 然后连接hub,对hub的调用方法监听即可.signalr还有很多其他的高级用法,就需要参照官方文档及api文档去使用了.

你可能感兴趣的:(asp.net webapi使用signalR 前后端分离方案)