.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: