[料理佳餚] ASP.NET MVC 使用 Azure SignalR Service 打造簡單的聊天室

先前在 [桌邊服務] 關於 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 服務的畫面。

安裝必要的套件

程式的部分有幾個必須要安裝的套件:

調整程式碼

我是直接把之前的範例拿來改,要調整的地方意外地少,只有三個地方,其他部分完全不用改。

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 >

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學