У меня есть приложение Silverlight 5, обращающееся к серверу с помощью SignalR. В большинстве случаев это работает нормально, но время от времени при запуске в режиме отладки я получаю сообщение об ошибке во время согласования. Я думаю, что это может быть из-за того, что в моей локальной установке ISS заканчиваются соединения.
В любом случае, когда это происходит, вызывается обработчик необработанных исключений в моем приложении. Я хочу изменить это, чтобы я мог обрабатывать исключение, локальное для инициализации SignalR. Я не хочу, чтобы ошибка согласования распространялась на мой центральный обработчик ошибок.
У меня есть кусок кода, который выглядит следующим образом:
var uri = Application.Current.Host.Source.GetComponents(UriComponents.Scheme | UriComponents.HostAndPort, UriFormat.Unescaped);
_hubConnection = new HubConnection(uri);
var hub = _hubConnection.CreateProxy("stuffhub");
hub.On<Stuff>("Stuff", message => DoStuff());
var transport = new LongPollingTransport();
_hubConnection.Start(transport);
Этот код в большинстве случаев выполняется нормально, но иногда следующее исключение передается моему центральному обработчику необработанных исключений через несколько секунд после выполнения приведенного выше кода.
Message: Exception(s) occurred : .
[ Exception(s) occurred : .
[ Exception(s) occurred : .
[ Exception(s) occurred : .
[ System.InvalidOperationException: Server negotiation failed.
vid SignalR.Client.Transports.HttpBasedTransport.<GetNegotiationResponse>b__0(IResponse response)
vid SignalR.TaskAsyncHelper.FromMethod[T1,TResult](Func`2 func, T1 arg) ]
]
]
]
StackTrace ApplicationUnhandledExceptionEventArgs:
at System.Threading.Tasks.Task.Finalize()