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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM