在IIS中部署带有ARR的signalR(应用程序请求路由)

时间:2019-01-08 12:11:38

标签: c# iis signalr signalr-hub arr

我们在Application中使用SignalR。有一个例外类型:

  

集线器服务器无法启动。消息:发生一个或多个错误。   堆栈跟踪:   System.Threading.Tasks.Task.ThrowIfExceptional(Boolean   includeTaskCanceledExceptions)   System.Threading.Tasks.Task.Wait(Int32毫秒超时,   的CancellationToken cancelToken()   System.Threading.Tasks.Task.Wait()在   ProjectName.TryStartHub(对象来源,ElapsedEventArgs e)

当我们在系统中进行本地测试时没有错误。当我们使用ARR部署它时。那么就有一个例外是仅仅因为ARR。同时我们也删除了ARR,然后尝试了它。但是它不适用于ARR。

代码正确,但是SignalR带有ARR的配置问题。

    public void InitializeHub()
    {
        appLog.Write("Initializing Hub Server");
        IHubProxy _hub;
        var querystringData = new Dictionary<string, string>();
        querystringData.Add("Key", "key1");
        hypervisorConnection = new HubConnection("url", querystringData);
        _hub = hConnection.CreateHubProxy("Hub");
        _hub.On<HypervisorCommand>("ExecuteHypervisorCommand", x => ExecuteHypervisorCommand(x));

        #region Initialize Hub Timer
        hHubTimer = new System.Timers.Timer();
        hHubTimer.Elapsed += new ElapsedEventHandler(TryStartHub);
        hHubTimer.AutoReset = false;
        hHubTimer.Interval = 1000;
        hHubTimer.Enabled = true;
        hHubTimer.Start();
        #endregion
    }

    private void TryStartHub(object source, ElapsedEventArgs e)
    {
        try
        {
            if (hConnection.State != ConnectionState.Connected)
            {
                hConnection.Start().Wait();
                appLog.Write("Hypervisor Hub server started.");
            }
        }
        catch (Exception ex)
        {
            appLog.Write("Hub Server was unable to start. Message:" + ex.Message + "\n Stack trace:" + ex.StackTrace);
        }
        hHubTimer.Interval = 30000;
        hHubTimer.Start();
    }

1 个答案:

答案 0 :(得分:0)

所以,终于我们解决了这个问题。 IIS负载平衡器ARR(应用程序请求路由)的配置中存在问题。

1。首先,从IIS菜单中选择ARR。 enter image description here   2。转到Proxy并将响应缓冲区阈值设置为0。为什么我们必须将响应缓冲区大小设置为0?这是详细说明: 默认情况下,此设置为256kb,这意味着它将缓冲响应,直到响应达到该数量为止。将此设置为0,ARR将不再缓冲,SignlR将正常运行。

enter image description here

3。然后转到负载平衡器,并将负载平衡器算法从“循环”更改为“服务器变量哈希”。现在,SignalR客户端每次都将连接到集线器。