先前在 [桌邊服務] 關於 ASP.NET SignalR 連線數限制 這篇文章有提到微軟有推出一個雲端服務 - Azure SignalR Service,順手將之前 ASP.NET SignalR 聊天室的範例改用 Azure SignalR Service,意外地非常簡單。
新增 Azure SignalR Service
我們到 Azure 的 Portal 找到 SignalR
接著我們就新增一個 SignalR 服務,需要填入的項目如下:
- Resource Name(資源名稱)
- Subscription(訂閱帳戶)
- Resource Group(資源群組)
- Location(區域):目前離我們台灣最近的資料中心-
東亞
沒有提供 SignalR 的服務,可以選擇相對較近的資料中心-日本東部
或是東南亞
。 - Pricing tier(定價層級):目前 20 個連線是免費的
稍待幾分鐘之後我們就可以看到已成功部署
的訊息,點選前往資源
就可以直接到剛剛建好的 SignalR 服務的畫面。
安裝必要的套件
程式的部分有幾個必須要安裝的套件:
- Microsoft.AspNet.SignalR 2.4.0
- Microsoft.Azure.SignalR.AspNet 1.0.0-preview1-10330:這個套件目前還只有 Prerelease 的版本
調整程式碼
我是直接把之前的範例拿來改,要調整的地方意外地少,只有三個地方,其他部分完全不用改。
app.MapSignalR() 改成 app.MapAzureSignalR()
將原本 MapSignalR() 改成 MapAzureSignalR(),要給它一個 applicationName
參數,主要是給我們自己用來區分應用程式用的。
改用 jquery.signalR-2.4.0
配合 Microsoft.AspNet.SignalR 版本,需要將 jquery.signalR 也一起升級到 2.4.0 版本。
新增 Azure:SignalR:ConnectionString 連線字串
在 Web.Config 裡面新增名稱為 Azure:SignalR:ConnectionString 的連線字串
<?xml version="1.0" encoding="utf-8"?>
<!--
如需如何設定 ASP.NET 應用程式的詳細資訊,請瀏覽
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
...
<connectionStrings>
<add name="Azure:SignalR:ConnectionString" connectionString="..." />
</connectionStrings>
...
</configuration>
連線字串的值可以從 SignalR 服務的 Keys
設定中取得,它備有兩組,兩組都可以拿來用。
調整完畢後我們就可以測試看看了
原先自主提供的 SignalR 服務完全轉發給 Azure SignalR Service,伺服器就不必再承受需要維持長期連線的壓力,而且也不用關心 Scale-out 的問題,花點小錢省點力氣。
參考資料
< Source Code >