.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與小程式(全國第一例)
目前在百度及谷歌中幾乎找不到
首先從Web請求入手:
跟進web端的請求報文看:
第一個請求:主要是請求signalr獲取授權金鑰
請求頭:
響應:
響應中的資料在第二個請求連線中有用到connectionToken進行鑑權連線,如果沒有這個引數,第二個請求是沒有辦法連線成功的。那在微信小程式中的請求如下:
第二個請求:請求連線signalr
請求Url:
請求Url中的引數:
請求中除了一定要的引數外,tid其實可以算是自定義的引數,可以在服務端Hub裡面獲取到自帶的引數的值。
這樣就可以獲取到自定義的引數。那麼在微信小程式端的程式碼如下:(這裡要重點標明,引數和
除了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: