使用 SQL Server 的向外延展 (SignalR 1.x)

作者: Patrick Fletcher

警告

本檔不適用於最新版的 SignalR。 請查看ASP.NET Core SignalR

在本教學課程中,您將使用 SQL Server,將訊息分散到部署在兩個不同的 IIS 實例中的 SignalR 應用程式。 您也可以在單一測試電腦上執行本教學課程,但若要發揮完整效果,您必須將 SignalR 應用程式部署到兩部以上的伺服器。 您也必須在其中一部伺服器上或個別的專用伺服器上安裝SQL Server。 另一個選項是使用 Azure 上的 VM 來執行教學課程。

S Q L 伺服器及其 V Ms、電腦、傳送查詢和更新至 S Q L 伺服器之間的關聯性圖表。

必要條件

Microsoft SQL Server 2005 或更新版本。 背板同時支援桌面和伺服器版本的 SQL Server。 它不支援 SQL Server Compact Edition 或 Azure SQL Database。 (如果您的應用程式裝載于 Azure 上,請考慮改為使用服務匯流排背板。)

概觀

在我們進入詳細的教學課程之前,以下是您將執行的快速概觀。

  1. 建立新的空白資料庫。 背板將會在此資料庫中建立必要的資料表。

  2. 將這些 NuGet 套件新增至您的應用程式:

  3. 建立 SignalR 應用程式。

  4. 將下列程式碼新增至 Global.asax 以設定背板:

    protected void Application_Start()
    {
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

設定資料庫

決定應用程式將使用 Windows 驗證或SQL Server驗證來存取資料庫。 不論為何,請確定資料庫使用者具有登入、建立架構和建立資料表的許可權。

建立新的資料庫,讓後臺板可供使用。 您可以為資料庫指定任何名稱。 您不需要在資料庫中建立任何資料表;背板會建立必要的資料表。

[物件總管] 視窗的螢幕擷取畫面,其中已醒目提示 [資料庫] 資料夾,並顯示其包含的子資料夾。

啟用 Service Broker

建議為幕後程式資料庫啟用 Service Broker。 Service Broker 在 SQL Server 中提供傳訊和佇列的原生支援,讓背板接收更新更有效率。 不過, (,背板也可在沒有 Service Broker.) 的情況下運作

若要檢查 Service Broker 是否已啟用,請查詢sys.databases目錄檢視中的[is_broker_enabled] 資料行。

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Service Broker 中顯示的 S Q L 查詢 1 點 S Q L 索引標籤螢幕擷取畫面,其中顯示 [結果] 和 [訊息] 索引標籤。

若要啟用 Service Broker,請使用下列 SQL 查詢:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

注意

如果此查詢似乎死結,請確定沒有連線到資料庫的應用程式。

如果您已啟用追蹤,追蹤也會顯示是否已啟用 Service Broker。

建立 SignalR 應用程式

遵循下列其中一個教學課程來建立 SignalR 應用程式:

接下來,我們將修改聊天應用程式,以支援使用SQL Server向外延展。 首先,將 SignalR.SqlServer NuGet 套件新增至您的專案。 在 Visual Studio 的 [ 工具 ] 功能表中,選取 [NuGet 套件管理員],然後選取 [ 套件管理員主控台]。 在 [Package Manager Console] 視窗中,輸入下列命令:

Install-Package Microsoft.AspNet.SignalR.SqlServer

接下來,開啟 Global.asax 檔案。 將下列程式碼新增至 Application_Start 方法:

protected void Application_Start()
{
    string sqlConnectionString = "<add your SQL connection string here>";
    GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);

    RouteTable.Routes.MapHubs();
}

部署並執行應用程式

準備您的 Windows Server 實例以部署 SignalR 應用程式。

新增 IIS 角色。 包含「應用程式開發」功能,包括 WebSocket 通訊協定。

[新增角色及功能精靈] 畫面的螢幕擷取畫面,其中已醒目提示 [伺服器角色] 和 [Web 通訊端通訊協定] 選項。

也包含 [管理工具] ) 底下所列的管理服務 (。

[新增角色及功能精靈] 畫面的螢幕擷取畫面,其中已醒目提示 [伺服器角色] 和 [I S 管理腳本和工具] 選項。

安裝 Web Deploy 3.0。 當您執行 IIS 管理員時,它會提示您安裝Microsoft Web Platform,或者您可以下載安裝程式。 在 [平臺安裝程式] 中,搜尋 Web Deploy 並安裝 Web Deploy 3.0

Web Platform Installer 4 點 5 畫面的螢幕擷取畫面,其中顯示醒目提示 [Web Deploy 3 點 0] 選項的搜尋結果。

檢查 Web 管理服務是否正在執行。 如果沒有,請啟動服務。 (如果您在 Windows 服務清單中看不到 Web 管理服務,請確定您在新增 IIS 角色時已安裝管理服務。)

最後,開啟 TCP 的埠 8172。 這是 Web Deploy 工具所使用的埠。

現在您已準備好將 Visual Studio 專案從開發電腦部署到伺服器。 在 Solution Explorer中,以滑鼠右鍵按一下解決方案,然後按一下 [發佈]。

如需 Web 部署的詳細檔,請參閱 適用于 Visual Studio 和 ASP.NET 的 Web 部署內容對應

如果您將應用程式部署到兩部伺服器,您可以在個別的瀏覽器視窗中開啟每個實例,並查看它們各自接收來自另一部的 SignalR 訊息。 (當然,在生產環境中,這兩部伺服器會位於負載平衡器後方。)

Internet Explorer 瀏覽器視窗的螢幕擷取畫面,其中顯示顯示 Signal R 訊息的 [索引] 畫面。

執行應用程式之後,您可以看到 SignalR 已在資料庫中自動建立資料表:

[物件總管] 畫面的螢幕擷取畫面,其中已醒目提示 MIKE 虛線 S Q L 伺服器,並顯示其包含的資料夾和伺服器。

SignalR 會管理資料表。 只要部署您的應用程式,請勿刪除資料列、修改資料表等等。