Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
В последнее время в веб-среде все чаще создаются веб-приложения, использующие технологии коммуникаций в реальном времени: это и простые чаты, и более сложные многопользовательские видеоконференции. Такие приложения могут использовать различные приемы работы: технологию Web Socket, опросы long polling и т.д. Для упрощения работы с коммуникациями реального времени была создана специальная библиотека под названием SignalR.
При этом SignalR не является библиотекой, предназначенной только для использования в ASP.NET MVC. Ее также можно использовать и в веб-формах, а также в консольных приложениях, десктопных приложения и в WPF.
SignalR предоставляет простой API для создания функционала, который позволяет вызывать функции JavaScript на стороне клиента из серверного кода, написанного с помощью языков платформы .NET. SignalR значительно упрощает работу с коммуникациями реального времени. Библиотека обрабатывает все подключения и автоматически рассылает сообщения всем подключенным клиентам, либо каким-нибудь специфическим клиентам.
Фактически библиотека SignalR состоит из API серверной стороны, который применяется в коде на C#, и из клиентских библиотек JavaScript.
SignalR предоставляет разработчикам две модели: постоянные подключения (Persistent Connection) и хабы (Hubs).
Постоянные подключения (Persistent Connection API) представляют разработчикам прямой доступ к низкоуровневому протоколу коммуникации. Подключения в этой модели представляют конечную точку, к которой подключаются клиенты, наподобие модели подключений в WCF.
Хабы же предоставляют протокол взаимодействия более высокого уровня. Они представляют верхний слой над Persistent Connection API и позволяют клиенту и серверу напрямую вызывать методы друг друга.
Если вы будете работать с SignalR, то скорее всего будете преимущественно использовать хабы, как более удобные инструменты.
SignalR поддерживается наиболее распространенными серверными платформами на базе ОС Windows:
Windows Server 2012
Windows Server 2008 r2
Windows 8
Windows 7
Windows Azure
Для работы на стороне сервера также необходима версия фреймворка .net от 4.0 и выше.
Поддерживаемые клиентские платформы (браузеры) тоже многообразны:
Microsoft Internet Explorer 8, 9, 10, 11. Версии Modern, Desktop и Mobile
Mozilla Firefox: как на ОС Windows, так и на Mac ОС
Google Chrome: как на ОС Windows, так и на Mac ОС
Safari: как на ОС Windows, так и на Mac ОС
Opera: ОС Windows
Android-браузер
Также следует учитывать, что браузер должен поддерживать библиотеку jQuery 1.6.4 или более поздние версии.
Для обмена данными между клиентом и сервером SignalR использует тот способ передачи или тот транспорт, который наиболее подходит к данной ситуации. Однако разработчики могут переопределить способ передачи. SignalR предоставляет следующие типы технологий для взаимодействия сервера и клиента:
WebSockets
Server-sent events
Forever Frames
Long polling
При создании подключения SignalR выбирает, если доступно, технологию WebSocket, так как это наиболее оптимальная технология для SignalR, наиболее эффективно использующая память сервера. В то же время WebSocket может использоваться только на серверах под управлением Windows Server 2012 или Windows 8 и при наличии установленного .NET Framework 4.5. При этом также технология WebSocket должна поддерживаться и браузером клиента. И если технология WebSocket недоступна на сервере или клиенте, то выбирается другой транспорт.
Если WebSocket недоступен, то SignalR использует технологию Server Sent Events, при ее поддержке сервером и клиентом.
Если технология Server Sent Events также недоступна, то используются скрытые фреймы - Forever Frames.
И если Forever Frames также недоступны, то используется Long Polling. Например, если на стороне клиента используется браузер IE 8 и ниже, то используется Long Polling.
Теперь рассмотрим работу с библиотекой на конкретных примерах.