博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebAPI集成SignalR
阅读量:5070 次
发布时间:2019-06-12

本文共 2476 字,大约阅读时间需要 8 分钟。

WebAPI提供通用数据接口,SignalR提供实时消息传输,两者可以根据实际业务需求进行组合。

环境 版本
操作系统 Windows 10 prefessional
编译器 Visual Studio 2015 update3

创建WebAPI项目

创建WebAPI项目,使用Nuget为项目添加SignalR类库。

这里写图片描述

创建Hub类

SignalR中提供了两种能实现实时通信的类,PersistentConnection类(持久链接)和Hub类(集线器),两者的区别不多赘述,此处以Hub类为例。

创建类MessageHub,Hub类作为基类。

public class MessageHub : Hub{    public  void Welcome(string name)    {        Clients.All.listen(System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") +":"+ name + ":"+Context.ConnectionId);    }}

创建WebAPI控制器类

创建WebAPI控制器类BaseApiController作为后续控制器类的基类,此类继承于ApiController。以泛型的形式引入SignalR的Hub类,同时以接口的形式引入了Hub类中的Clients和Groups,这样Clients和Groups的相关操作就都能在WebAPI中实现了。

public class BaseApiController
: ApiController where T:Hub { protected IHubConnectionContext
Clients { get; private set; } protected IGroupManager Groups { get; private set; } protected BaseApiController() { var context = GlobalHost.ConnectionManager.GetHubContext
(); Clients = context.Clients; Groups = context.Groups; } }

有了上面的控制器基类后,后面添加的API控制器类只要继承这个基类就能使用Hub类中的方法了。

public class DemoController: BaseApiController
{ [AcceptVerbs("GET")] public async Task
GetString() { return await Task.FromResult("Hello"); } [AcceptVerbs("GET")] public async Task SayHello(string name) { string message = string.Format("Hello,{0}!", name); await Clients.All.sayHello(message); } }

相关配置

为了接口调用和实时消息传输的方便,最好修改Startup类进行一些跨域的配置。

public class Startup    {        public void Configuration(IAppBuilder app)        {            //消息总线--集线器Hub配置            app.Map("/MessageHub",map=> {                //SignalR允许跨域调用                map.UseCors(CorsOptions.AllowAll);                HubConfiguration config = new HubConfiguration()                {                    //禁用JavaScript代理                    EnableJavaScriptProxies = false,                    //启用JSONP跨域                    EnableJSONP = true,                    //反馈结果给客户端                    EnableDetailedErrors = true                };                map.RunSignalR(config);            });            //WebApi允许跨域调用            app.UseCors(CorsOptions.AllowAll);        }    }

这样的话,WebAPI和SignalR就集成在同一个项目中了,既可以单独调用WebAPI接口实现业务逻辑,也可单独连接SignalR实现消息推送,也可以将两者组合使用–在进行逻辑处理的同时推送消息。

转载于:https://www.cnblogs.com/hnsongbiao/p/8716832.html

你可能感兴趣的文章
display的值有哪些?
查看>>
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
基于Lucene3.5.0怎样从TokenStream获得Token
查看>>
一网打尽各类Java基本数据类型转换
查看>>
FlowLayout布局
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>
React文档翻译 (快速入门)
查看>>
nodejs fs路径
查看>>
动态规划算法之最大子段和
查看>>
linux c:关联变量的双for循环
查看>>
深入浅出理解zend framework(三)
查看>>
python语句----->if语句,while语句,for循环
查看>>
javascript之数组操作
查看>>
LinkedList源码分析
查看>>
TF-IDF原理
查看>>
用JS制作博客页面背景随滚动渐变的效果
查看>>
JavaScript的迭代函数与迭代函数的实现
查看>>
一步步教你学会browserify
查看>>