118  
查询码:00000423
.Net Webapi SignalR与微信小程序的交互
来源:https://www.cnblogs.com/Vam8023/p/9768216.html
作者: 朱凡 于 2020年02月23日 发布在分类 / FM组 / FMWechat 下,并于 2020年02月23日 编辑
请求 signalr 可以 参数 程序 文件 webapi 连接 消息 使用

.Net Webapi SignalR与微信小程序的交互

.Net Webapi S ignal R 与微信小程序 的交互

一、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:



 推荐知识

 历史版本

修改日期 修改人 备注
2020-02-23 21:26:53[当前版本] 朱凡 创建版本

 附件
知识分享平台 -V 4.8.7 -wcp