Signalr自託管最簡實踐

豐雲發表於2018-04-19

最近幾天,專案要開發一個即時通訊的產品,同時需要把服務端嵌入到已有的winform程式裡,也就是說,不能依賴網站釋出器(iis、tomcat、apache等)。

於是查了大量資料,發現絕大部分的資料,都是講的如何託管在web應用裡,真正其他託管的很少,即便有,往往也介紹不全,照抄之後,跑不起來。

於是花了一些時間,寫了一個自託管的signalr應用,現在把最簡配置記錄如下,希望對大家有所幫助。


首先,這個signalr服務端,是託管在winform程式裡,因此,第一步是建立一個winform專案ChatMgr, 同時建立一個空的web站點Test用來測試。

然後通過nuget給ChatMgr專案安裝Microsoft.AspNet.SignalR.SelfHost 和 Microsoft.Owin.Cors元件


接著給ChatMgr程式新增Signalr控制類Signalr.cs


這裡面有兩個物件類,一個是註冊signalr服務的啟動類Startup,一個是signalr控制器(集線器),具體資訊互動處理的實現類,

這裡只簡單實現一個資訊交換傳遞的方法。

接下來是在winform應用的入口處啟動signalr服務:


這裡注意,你註冊的signalr服務的domain,就是客戶端訪問的domain。

到這一步,服務端程式就建立好了,接下來搭建測試環境:

首先用nuget給測試站點新增jquery 和 Microsoft.AspNet.SignalR.JS的包引用


然後是一個簡單的測試頁,照搬的網上一個資料內容:


這裡也有注意事項,一是signalr.js依賴jquery,因此需要引用適當版本的jquery,

其次是在引用了signalr.js後,還需要配置服務端虛擬路徑,也就是上圖中紅框標註的空引用。


最後是整個專案的全家福:


接著執行起來測試一下,首先執行winform程式,啟動服務,

然後開啟網頁,嘗試發訊息:


ok,程式完全跑通!

今天給signalr服務新增了主推功能,根據網上資料,有三種實現方法,也列舉一下:


相關文章