使用 Azure 服務匯流排的 SignalR 向外延展
作者: Patrick Fletcher
警告
本檔不適用於最新版的 SignalR。 請查看ASP.NET Core SignalR。
在本教學課程中,您將使用服務匯流排幕後程式將 SignalR 應用程式部署到 Windows Azure Web 角色,以將訊息散發至每個角色實例。 (您也可以在 Azure App Service.) 中搭配 Web 應用程式使用服務匯流排後板
先決條件:
- Windows Azure 帳戶。
- Windows Azure SDK。
- Visual Studio 2012 或 2013。
服務匯流排背板也與 Windows Server 1.1 版 的服務匯流排相容。 不過,它與 Windows Server 服務匯流排 1.0 版不相容。
定價
服務匯流排背板會使用主題來傳送訊息。 如需最新的定價資訊,請參閱 服務匯流排。 在撰寫本文時,您可以每月傳送 1,000,000 則訊息,少於 $1。 背板會針對 SignalR 中樞方法的每個調用傳送服務匯流排訊息。 也有一些控制訊息可用於連線、中斷連線、聯結或離開群組等等。 在大部分的應用程式中,大部分的訊息流量都會是中樞方法調用。
概觀
在我們進入詳細的教學課程之前,以下是您將執行的快速概觀。
使用 Windows Azure 入口網站建立新的服務匯流排命名空間。
將這些 NuGet 套件新增至您的應用程式:
建立 SignalR 應用程式。
將下列程式碼新增至 Startup.cs 以設定背板:
public void Configuration(IAppBuilder app) { string connectionString = "Service Bus connection string"; GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName"); app.MapSignalR(); // ... }
此程式碼會使用 TopicCount 和 MaxQueueLength的預設值來設定背板。 如需變更這些值的資訊,請參閱 SignalR 效能:向外延展計量。
針對每個應用程式,針對 「YourAppName」 挑選不同的值。 請勿在多個應用程式之間使用相同的值。
建立 Azure 服務
建立雲端服務,如 如何建立和部署雲端服務中所述。 Follow the steps in the section "How to: Create a cloud service using Quick Create". 在本教學課程中,您不需要上傳憑證。
建立新的服務匯流排命名空間,如 如何使用服務匯流排主題/訂用帳戶中所述。 請遵循一節中的步驟。
注意
請務必為雲端服務和服務匯流排命名空間選取相同的區域。
建立 Visual Studio 專案
啟動 Visual Studio。 從 [檔案] 功能表,按一下 [新增專案]。
在 [ 新增專案] 對話方塊中,展開 [Visual C#]。 在 [已安裝的範本] 底下,選取 [ 雲端 ],然後選取 [Windows Azure 雲端服務]。 保留預設.NET Framework 4.5。 將應用程式命名為 ChatService,然後按一下 [ 確定]。
在 [ 新增 Windows Azure 雲端服務 ] 對話方塊中,選取 [ASP.NET Web 角色]。 按一下向右鍵按鈕 (>) ,將角色新增至您的解決方案。
將滑鼠停留在新角色上,讓鉛筆圖示可見。 按一下此圖示以重新命名角色。 將角色命名為 「SignalRChat」,然後按一下 [ 確定]。
在 [ 新增 ASP.NET 專案 ] 對話方塊中,選取 [MVC],然後按一下 [確定]。
專案精靈會建立兩個專案:
- ChatService:此專案是 Windows Azure 應用程式。 它會定義 Azure 角色和其他組態選項。
- SignalRChat:此專案是您 ASP.NET MVC 5 專案。
建立 SignalR Chat 應用程式
若要建立聊天應用程式,請遵循 開始使用 SignalR 和 MVC 5教學課程中的步驟。
使用 NuGet 來安裝必要的程式庫。 從 [ 工具 ] 功能表中,選取 [NuGet 套件管理員],然後選取 [ 套件管理員主控台]。 在 [ 套件管理員主控台] 視窗中,輸入下列命令:
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus
-ProjectName
使用 選項將套件安裝到 ASP.NET MVC 專案,而不是 Windows Azure 專案。
設定背板
在應用程式的 Startup.cs 檔案中,新增下列程式碼:
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
string connectionString = "";
GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");
app.MapSignalR();
}
現在您需要取得服務匯流排連接字串。 在 Azure 入口網站中,選取您建立的服務匯流排命名空間,然後按一下 [存取金鑰] 圖示。
將連接字串複製到剪貼簿,然後將它貼到 connectionString 變數中。
string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";
部署至 Azure
在 [Solution Explorer] 中,展開 ChatService 專案內的 [角色] 資料夾。
以滑鼠右鍵按一下 SignalRChat 角色,然後選取 [ 屬性]。 選取 [ 組態] 索引標籤。在 [實例] 底 下,選取 [2]。 您也可以將 VM 大小設定為 [額外小型]。
儲存變更。
在 Solution Explorer 中,以滑鼠右鍵按一下 ChatService 專案。 選取 [發佈]。
如果這是您第一次發佈至 Windows Azure,您必須下載認證。 在 [ 發佈 精靈] 中,按一下 [登入以下載認證]。 這會提示您登入 Windows Azure 入口網站,並下載發佈設定檔。
按一下 [匯 入],然後選取您下載的發佈設定檔。
按一下 [下一步] 。 在 [ 發佈設定] 對話方塊的 [ 雲端服務] 底下,選取您稍早建立的雲端服務。
按一下 [發佈]。 部署應用程式並啟動 VM 可能需要幾分鐘的時間。
現在當您執行聊天應用程式時,角色實例會使用服務匯流排主題透過 Azure 服務匯流排進行通訊。 主題是允許多個訂閱者的訊息佇列。
背板會自動建立主題和訂用帳戶。 若要查看訂用帳戶和訊息活動,請開啟 Azure 入口網站,選取服務匯流排命名空間,然後按一下 [主題]。
訊息活動需要幾分鐘的時間才會顯示在儀表板中。
SignalR 會管理主題存留期。 只要部署您的應用程式,請勿嘗試手動刪除主題或變更主題上的設定。
疑難排解
System.InvalidOperationException「唯一支援的 IsolationLevel 是 'IsolationLevel.Serializable'」。
如果作業的交易層級設定為 以外的 Serializable
專案,就會發生此錯誤。 確認其他交易層級未執行任何作業。