Проблема с масштабируемостью концентратора SignalR

У нас есть концентратор SignalR под названием StatusUpdateHub. Этот концентратор обновляется клиентом.NET под названием HubClient. Этот клиент будет (в рабочей среде )вызываться примерно 1000 раз в секунду несколькими пользователями для различных транзакций. Вот код клиента:

public static class HubClient
{
    private static readonly string statusUpdateUrl = ConfigurationManager.AppSettings["StatusUpdateUrl"];
    private static readonly HubConnection connection = new HubConnection(statusUpdateUrl);
    private static readonly IHubProxy hub = connection.CreateProxy("StatusUpdateHub");

    internal static void UpdateBrowser(long transactionId)
    {
        connection.Start().ContinueWith(task => hub.Invoke("UpdateTransactionStatus", transactionId)).ContinueWith(task =>
        {
            if (task.IsFaulted && task.Exception != null)
            {
                // log error
            }
        });
    }
}

Когда этот код вызывается со 100 одновременными пользователями, он работает нормально, но когда мы увеличиваем количество одновременных пользователей до 250, мы видим следующую ошибку:

Unexpected error in UpdateBrowser: System.InvalidOperationException: The connection has not been established. at SignalR.Client.Connection.SignalR.Client.IConnection.Send[T](String data) at SignalR.Client.Hubs.HubProxy.Invoke[T](String method, Object[] args) at SignalR.Client.Hubs.HubProxy.Invoke(String method, Object[] args) at Application.Services.HubClient.<>c_DisplayClass2.b_0(Task task1) in c:\Build\Work\Application\Services\HubClient.cs:line 20
at System.Threading.Tasks.Task`1.InvokeFuture(Object futureAsObj)
at System.Threading.Tasks.Task.Execute()

Дайте нам знать, как мы можем сделать код более масштабируемым?

7
задан Leniel Maccaferri 29 July 2012 в 07:56
поделиться