使用 SQL Server 的向外延展

作者: Patrick Fletcher

警告

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

本主題中使用的軟體版本

本主題的舊版

如需舊版 SignalR 的相關資訊,請參閱 SignalR 舊版

問題和批註

請留下您喜歡本教學課程的意見反應,以及我們可以在頁面底部的批註中改善的內容。 如果您有與教學課程不直接相關的問題,您可以將問題張貼到 ASP.NET SignalR 論壇StackOverflow.com

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

此圖顯示從 S Q L 伺服器到 V M 到電腦的箭號。一個標示為 Update 的箭號會從 V M 開始,並移至 S Q L 伺服器。

必要條件

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

概觀

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

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

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

  3. 建立 SignalR 應用程式。

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

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            string sqlConnectionString = "Connecton string to your SQL DB";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }
    

    此程式碼會使用 TableCountMaxQueueLength的預設值來設定背板。 如需變更這些值的資訊,請參閱 SignalR 效能:向外延展計量

設定資料庫

決定應用程式將使用 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]

顯示 sys dot databases 目錄檢視之視窗的螢幕擷取畫面。

若要啟用 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

接下來,開啟 Startup.cs 檔案。 將下列程式碼新增至 Configure 方法:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

部署並執行應用程式

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

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

顯示 [新增角色及功能精靈] 對話方塊的螢幕擷取畫面。已選取 [伺服器角色] 和 [WebSocket 通訊協定]。

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

顯示 [新增角色及功能精靈] 對話方塊的螢幕擷取畫面。已選取 [伺服器角色] 和 [管理服務]。

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

Web 部署 3 點 0 在搜尋結果中選取的螢幕擷取畫面。

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

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

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

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

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

兩個瀏覽器視窗開啟的螢幕擷取畫面,其中顯示部署至兩部伺服器的應用程式。

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

[物件總管] 對話方塊的螢幕擷取畫面,其中顯示資料夾和檔案。

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