1. 程式人生 > >.Net Webapi SignalR與微信小程式的互動

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