2013-03-04 2 views
1

Я использую DLL SignalR.client для диалога с веб-сайтом с помощью SignalR. Он отлично работает, когда клиент и сайт находятся на одной машине. (Invocation hub method является немедленным)Вызов методов хаба медленнее по локальной сети

Однако, теперь, когда я настраивал сайт на машине по моей сети, вызовы (вызовы) занимают среднее значение 2,5 секунды. (но работа)

Я пинг машины в < 1 мс.

Использование Wireshark Я видел, что пакеты отправляются через 2,5 секунды.

я отладил DLL SignalR.client и он застрял на уровне System.Threading.Task (называемый здесь, в HttpHelper.cs)

[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Exceptions are flowed back to the caller.")] 
    public static Task<Stream> GetHttpRequestStreamAsync(this HttpWebRequest request) 
    { 
     try 
     { 
      return Task.Factory.FromAsync<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream, null); 
     } 
     catch (Exception ex) 
     { 
      return TaskAsyncHelper.FromError<Stream>(ex); 
     } 
    } 

Любая идея, что может замедлить процесс?

Большое спасибо.

ps: Я использовал пример чата SignalR для воспроизведения задержки.

имп: Вот (очень простой) код моего тестового приложения:

var connection = new HubConnection("http://IP:PORT/SITENAME/"); 
    var myHub = connection.CreateHubProxy("ChatHub"); 

    // Start the connection 
    connection.Start().Wait(); 

    while (true) 
    { 
     string sMsg = string.Format("Hello world from winform! Sent(winform) at {0}", DateTime.Now.ToString("hh:mm:ss.fff")); 
     Console.WriteLine("Sending data : " + sMsg); 

     myHub.Invoke("Send", "Winform", sMsg).ContinueWith(task2 => 
     { 
     if (task2.IsFaulted) 
     { 
      Console.WriteLine("An error occurred during the method call {0}", task2.Exception.GetBaseException()); 
     } 
     else 
     { 
      Console.WriteLine("Successfully called MethodOnServer at {0}", DateTime.Now.ToString("hh:mm:ss.fff")); 
     } 
     }); 
     Thread.Sleep(60*1000); 
    } 
+0

ли это одно соединение? – davidfowl

+0

Да, я создаю одно соединение. Я обновляю основную запись кодом –

+0

Это консольное приложение? Код выглядит хорошо на поверхности. – davidfowl

ответ

0

Проблема была из-за плохой конфигурации локальной сети. Мой профессиональный компьютер использовал сценарий автоматической настройки + параметры автоматического определения соединения, которые замедляли все. (=> Глупы трата времени)

Спасибо Дэвиду за ответы & советы по использованию Fiddler (все работает нормально с ним, потому что я узнал Fiddler overrites конфигурации прокси-сервера)

Смежные вопросы