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. j收集ava面试题

    史上最全Java面试题(带全部答案) https://blog.csdn.net/linzhiqiang0316/article/details/80473906

  2. Springboot中使用Xstream进行XML与Bean 相互转换

    在现今的项目开发中,虽然数据的传输大部分都是用json格式来进行传输,但是xml毕竟也会有一些老的项目在进行使用,正常的老式方法是通过获取节点来进行一系列操作,个人感觉太过于复杂.繁琐.推荐一套简单的 ...

  3. linux 依赖解决办法

    在安装软件过程中如果出现依赖不满足,有两种情况: 1:你系统里面没有安装依赖软件,[但是你的软件源里面有这个软件,你只是没有安装], 这种情况很简单,通过 sudo apt-get install - ...

  4. How to flash Havoc on enchilada

    update fastboot and adb fastboot oem unlock adb debug enchilada reboot to fastboot fastboot devices ...

  5. Jenkins+PowerShell持续集成环境搭建(三)Web项目

    1. 新建一个名字为HelloWorld.Web的Freesyle项目: 2. 配置源码管理: 3. 编译配置: 版本:选择MSBuild4 文件:D:\CI\Config\HelloWorld.We ...

  6. 9.Pod控制器概念和基本操作2

    利用一个简单的例子来启动一个deployment的Pod控制器 [root@master song]# cat deploy.yml apiVersion: apps/v1 kind: Deploym ...

  7. model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转;解决的方法是用responsewrite(普通的字符响应)

    model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转:解决的方法是用responsewrite

  8. linux 安装Brew

    点击查看原文 Linuxbrew:Linux下的Homebrew amendgit 关注 2017.02.16 17:20* 字数 455 阅读 4745评论 0喜欢 2 前不久还在跟同事抱怨ubun ...

  9. 通过流量清理防御DDoS

    导读 在2018年2月,世界上最大的分布式拒绝服务(DDoS)攻击在发起20分钟内得到控制,这主要得益于事先部署的DDoS防护服务. 这次攻击是针对GitHub–数百万开发人员使用的主流在线代码管理服 ...

  10. mybatis,mysql批量delete多个记录

    1.dao 接口中 Integer delete(List<UserDeviceRela> relas); 2.xml <delete id="delete" p ...