Явно установите несколько транспортов в клиенте SignalR .Net
Можно ли в явном виде установить два (или более) транспорта в клиенте SignalR .Net?
Я могу установить один транспорт, используя код, такой как:
_hubCn.Start(new LongPollingTransport());
В клиенте Javascript это можно сделать с помощью:
connection.start({ transport: ['webSockets','longPolling'] });
Однако я не нашел перегрузки на клиенте.Net, который допускает это. Есть ли другой способ?
Для некоторого контекста это конкретное использование находится в приложении Silverlight 5. Я все еще исследую, какие различия это делает по сравнению с обычным использованием.Net или JS.
2 ответа
Использовать Автотранспорт:
var httpClient = new DefaultHttpClient();
_hubCn.Start(new AutoTransport(httpClient,
new IClientTransport[]
{
new WebSocketTransport(httpClient),
new LongPollingTransport(httpClient))
});
Как указано в исходном коде, список, который вы предоставляете:
Перечень транспортных средств в резервном порядке
Если вы не предоставляете транспорт при запуске соединения с клиентом.Net, он будет использовать так называемый AutoTransport
который в основном будет пробовать разные транспорты, пока не найдет тот, который работает. Обратите внимание, что в зависимости от платформы (например,.NET Framework и Silverlight/Portable) список транспортных средств, доступных для AutoTransport, может отличаться (в настоящее время вы получите WebSockets, ServerSentEvents и LongPolling для.NET и ServerSentEvents и LongPolling для Portable). Однако, если вы хотите исключить (или добавить - например, есть специальная реализация транспорта WebSocket для Windows Phone 8.1 (универсальное приложение)), вы можете вручную создать AutoTransport
и предоставить транспорт, который вы хотите использовать.