.Net Webapi SignalR与微信小程序的交互
.Net Webapi SignalR与微信小程序的交互
一、SignalR与Webapi
1、SignalR的安装:
Signalr与跨域仅需要安装两个开源库
Microsoft.Owin.Cors是配置跨域需要使用到的库。
2、SignalR的配置
需要新建一个Startup.cs文件来编写配置代码,我是建在App_Start文件夹里,与其他配置文件统一放置一起。
Configuration的配置不仅限于如此配置,也可以自定义,如:
3、Hub与Webapi的整合
创建Webapi父类,继承ApiController。则可以在需要使用Hub实时推送消息的api中继承这个父类,便可以直接使用Clients或Groups推送消息。简单来讲,就是可以通过Webapi进行signalr的消息推送。
4、Hub的创建与事件
直接在新建项中便可以创建对应的类文件。
在新建的文件中需要重写Hub的几个事件:
这3个事件都可以在其中进行业务处理。
在这个集线器中还可以定义推送消息的方法,后面在Web中可以直接调用。
二、SignalR与Web
当安装SignalR的时候,signalr会自带创建了Script文件夹(如还没有改文件夹的话),里面会新增一些js文件:
在Web的调用中,就会使用到jquery.signalR-2.0.0.js。这里简单介绍一下使用即可,不是重点。
服务端:
客户端:
三、SignalR与小程序(全国第一例)
目前在百度及谷歌中几乎找不到Webapi与微信小程序的交互的文档,只能自己摸索。
首先从Web请求入手:
跟进web端的请求报文看:
第一个请求:主要是请求signalr获取授权密钥
请求头:
响应:
响应中的数据在第二个请求连接中有用到connectionToken进行鉴权连接,如果没有这个参数,第二个请求是没有办法连接成功的。那在微信小程序中的请求如下:
第二个请求:请求连接signalr
请求Url:
请求Url中的参数:
请求中除了一定要的参数外,tid其实可以算是自定义的参数,可以在服务端Hub里面获取到自带的参数的值。
这样就可以获取到自定义的参数。那么在微信小程序端的代码如下:(这里要重点标明,参数和ConnectionToken都需要使用encodeURIComponent来进行参数的encode,否则会连接不成功了)
除了Open事件,还有onClose、onError、onMessage等事件,详细请查看微信官方文档。这里重点是onMessage,它是接收推送的消息的事件,这里可以处理展示推送的内容。
第三个请求:Web端还会发送第三个请求,也就是start。但在微信小程序端,Open就相当于start了。但还是贴一下Web端的请求:
消息头:
参数:传递的参数其实跟connect(第二个请求)的参数是一样的。
到这里,整个交互过程就结束了。
补充:
Windows server 2008r2的iis是没有websocket这一应用程序的,所以在2008r2上部署项目,web端访问是没有问题的,但在微信小程序中则不可以。因为在web端中的连接中,如果服务端支持websocket,请求会自动升级请求,如下图所示:
当服务器不支持websocket的时候,则会自动改问轮询的方式。这就是为什么微信小程序在2008r2中没法连接的原因。Iis8后支持。
不支持时,请求如图所示:
Iis8中安装websocket:
最新文章
- ABP框架 - 多租户
- 使用Open xml 操作Excel系列之一-读取Excel
- IOS-各控件默认尺寸和参考图标大小
- deleteRow
- LC.exe已退出,代码为-1错误
- spring 第一篇(1-1):让java开发变得更简单(下)转
- List<;>;.Contains<;>;的用法
- NOIP2011-普及组复赛模拟试题-第二题-买票
- Docker存储驱动之Btrfs简介
- (一)java多线程之Thread
- 整合SSH框架实现简单登录
- 转 多租户SaaS架构
- Educational Codeforces Round 42 (Rated for Div. 2) E. Byteland, Berland and Disputed Cities
- 如何编写一个d.ts文件
- 【Java】【6】JDK8 Stream操作整理
- 使用rgba设置输入框背景透明
- HDU 2051 Bitset
- tomcat7.0 windows部署使用80端口问题
- fs和http模块
- swagger 集成asp.net Core2.1
热门文章
- heartbeat.go
- .net core使用Apollo做统一配置管理
- .net core使用App.Metrics+InfluxDB+Grafana进行APM监控
- 【强连通分量+概率】Bzoj2438 杀人游戏
- linux系统版本查看
- 毕业样本=[威尔士大学毕业证书]UWIC原件一模一样证书
- 我的mfc基础知识点
- Postman----Newman的使用
- appium 出现报错“A new session could not be created. (Original error: Requested a new session but one was in progress)”的解决方式!
- django 多对多自定义第三张表时的注意事项