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<T> : ApiController where T:Hub
{ protected IHubConnectionContext<dynamic> Clients { get; private set; }
protected IGroupManager Groups { get; private set; }
protected BaseApiController()
{
var context = GlobalHost.ConnectionManager.GetHubContext<T>();
Clients = context.Clients;
Groups = context.Groups;
}
}

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

    public class DemoController: BaseApiController<MessageHub>
{
[AcceptVerbs("GET")]
public async Task<string> 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实现消息推送,也可以将两者组合使用–在进行逻辑处理的同时推送消息。

WebAPI集成SignalR的更多相关文章

  1. asp.net core 2.0 webapi集成signalr

    asp.net core 2.0 webapi集成signalr   在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.N ...

  2. asp.net core 2.0集成signalr

    在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net cor ...

  3. WebApi 集成 Swagger

    1. Swagger(俗称:丝袜哥)是什么东西? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同 ...

  4. ASP.NET WebAPI 集成 Swagger 启用 OAuth 2.0 配置问题

    在 ASP.NET WebAPI 集成 Swagger 后,由于接口使用了 IdentityServer 做的认证,调试起来很不方便:看了下 Swashbuckle 的文档 ,是支持 OAuth2.0 ...

  5. 【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 、配置swagger (三)

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  6. csc.rsp Nuget MVC/WebAPI、SignalR、Rx、Json、EntityFramework、OAuth、Spatial

    # This file contains command-line options that the C# # command line compiler (CSC) will process as ...

  7. 如何使用webapi集成swagger

    现在B/S开发中,前后端分离无疑已经成为一种新的时尚,但是如何把后端开发的接口更好的提供给前段开发呢?还用接口文档?low了吧.不仅要花时间开发接口,还得花时间写文档,白花花的时间不久浪费了吗.如果接 ...

  8. webapi 集成swagger

    参考资料:Stack Overflow 我自己写的demo:SwaggerDemoApi 在已有的webapi项目或者创建webapi项目中,打开nuget管理器 搜索:swagger 安装截图中的插 ...

  9. netcore3.1 webapi使用signalR

    前言 今天尝试了一下signalR,感觉还不错,因为暂时用不到,就写一篇博文来记录搭建过程,以免以后给忘了,基于官方文档写的,不过官方没有webapi调用例子,就自己写了一下,大神勿喷 使用 1.创建 ...

随机推荐

  1. C# Note30: 网络爬虫

    用C#实现网络爬虫(一) 用C#实现网络爬虫(二) 基于C#.NET的高端智能化网络爬虫(一)(反爬虫哥必看) 基于C#.NET的高端智能化网络爬虫(二)(攻破携程网) C#获取网页内容的三种方式

  2. log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?> <configuration status="info ...

  3. 如何抓取电商的数据 & Python

    如何抓取电商的数据 & Python https://www.zhihu.com/question/40720286 https://www.zhihu.com/question/382455 ...

  4. 一个实际的案例介绍Spring Boot + Vue 前后端分离

    介绍 最近在工作中做个新项目,后端选用Spring Boot,前端选用Vue技术.众所周知现在开发都是前后端分离,本文就将介绍一种前后端分离方式. 常规的开发方式 采用Spring Boot 开发项目 ...

  5. qtp10 安装笔记

    windows10系统安装QTP 10 1 QTP10 程序文件夹下,找到“setup”双击它运行安装程序-点击 否 继续安装 2 安装必要组件 3 下一步 选择安装程序目录-安装插件 直到完成安装 ...

  6. SpringBoot之修改单个文件后立刻生效

    问题: 在使用SpringBoot进行开发时,如果修改了某个文件比如前端页面html,不能立刻起效. 解决: 在idea中打开修改后的文件,使用快捷键Ctrl+Shift+F9 进行重新编译,然后刷新 ...

  7. vue2 mint-ui loadmore(下拉刷新)

    <template> <div class="page-loadmore"> <h1 class="page-title"> ...

  8. 今天开始学习模式识别与机器学习Pattern Recognition and Machine Learning (PRML),章节5.1,Neural Networks神经网络-前向网络。

    话说上一次写这个笔记是13年的事情了···那时候忙着实习,找工作,毕业什么的就没写下去了,现在工作了有半年时间也算稳定了,我会继续把这个笔记写完.其实很多章节都看了,不过还没写出来,先从第5章开始吧, ...

  9. Power Spectral Density

    对于一个特定的信号来说,有时域与频域两个表达形式,时域表现的是信号随时间的变化,频域表现的是信号在不同频率上的分量.在信号处理中,通常会对信号进行傅里叶变换得到该信号的频域表示,从而得到信号在频域上的 ...

  10. 前端使用Javascrip实现图片轮播

    Javascript实现网页图片自动轮播 1.创建一个img标签 设置默认图片,以及图片的高度和宽度,为了大家方便,我将CSS样式和JS语句都写在一个html文件中,演示用的图片来自小明官网:'htt ...