Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
Эта документация не подходит для последней версии SignalR. Взгляните на ASP.NET Core SignalR.
В этом руководстве показано, как создать локальный сервер SignalR 2 и как подключиться к нему с помощью клиента JavaScript.
Версии программного обеспечения, используемые в руководстве
- Visual Studio 2013
- .NET 4.5
- SignalR версии 2
Использование Visual Studio 2012 с этим руководством
Чтобы использовать Visual Studio 2012 с этим руководством, сделайте следующее:
- Обновите диспетчер пакетов до последней версии.
- Установите установщик веб-платформы.
- В установщике веб-платформы найдите и установите ASP.NET и веб-инструменты 2013.1 для Visual Studio 2012. Будут установлены шаблоны Visual Studio для классов SignalR, таких как Hub.
- Некоторые шаблоны (например , класс запуска OWIN) не будут доступны; для них используйте вместо него файл класса.
Вопросы и комментарии
Оставьте отзыв о том, как вам понравилось это руководство и что, по вашему мнению, мы можем улучшить в комментариях в нижней части страницы. Если у вас есть вопросы, которые не связаны напрямую с руководством, их можно опубликовать на форуме ASP.NET SignalR или StackOverflow.com.
Обзор
Сервер SignalR обычно размещается в приложении ASP.NET в IIS, но он также может быть размещен самостоятельно (например, в консольном приложении или службе Windows) с помощью локальной библиотеки. Эта библиотека, как и все SignalR 2, основана на OWIN (open Web Interface for .NET). OWIN определяет абстракцию между веб-серверами .NET и веб-приложениями. OWIN отделяет веб-приложение от сервера, что делает OWIN идеальным для самостоятельного размещения веб-приложения в собственном процессе за пределами IIS.
Причины, по которым приложение не размещается в IIS, включают:
- Среды, в которых службы IIS недоступны или нежелательны, например, существующая ферма серверов без использования IIS.
- Необходимо избежать издержек производительности IIS.
- Функция SignalR должна быть добавлена в существующее приложение, которое выполняется в службе Windows, рабочей роли Azure или другом процессе.
Если решение разрабатывается как самостоятельное размещение по соображениям производительности, рекомендуется также протестировать приложение, размещенное в IIS, чтобы определить преимущество производительности.
В этом руководстве содержатся следующие разделы:
Создание сервера
В этом руководстве вы создадите сервер, размещенный в консольном приложении, но сервер может размещаться в любом процессе, например в службе Windows или рабочей роли Azure. Пример кода для размещения сервера SignalR в службе Windows см. в Self-Hosting SignalR в службе Windows.
Откройте Visual Studio 2013 с правами администратора. Выберите файл, новый проект. Выберите Windows под узлом Visual C# в области шаблонов и выберите шаблон консольного приложения . Назовите новый проект SignalRSelfHost и нажмите кнопку "ОК".
Откройте консоль диспетчера пакетов NuGet, выбрав Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В консоли диспетчера пакетов введите следующую команду:
Install-Package Microsoft.AspNet.SignalR.SelfHostЭта команда добавляет библиотеки SignalR 2 Self-Host в проект.
В консоли диспетчера пакетов введите следующую команду:
Install-Package Microsoft.Owin.CorsЭта команда добавляет библиотеку Microsoft.Owin.Cors в проект. Эта библиотека будет использоваться для междоменной поддержки, которая требуется для приложений, в которых размещен SignalR и клиент веб-страницы в разных доменах. Так как сервер SignalR и веб-клиент будут размещаться на разных портах, это означает, что для обмена данными между этими компонентами необходимо включить междоменный доступ.
Замените содержимое Program.cs приведенным ниже кодом.
using System; using Microsoft.AspNet.SignalR; using Microsoft.Owin.Hosting; using Owin; using Microsoft.Owin.Cors; namespace SignalRSelfHost { class Program { static void Main(string[] args) { // This will *ONLY* bind to localhost, if you want to bind to all addresses // use http://*:8080 to bind to all addresses. // See http://msdn.microsoft.com/library/system.net.httplistener.aspx // for more information. string url = "http://localhost:8080"; using (WebApp.Start(url)) { Console.WriteLine("Server running on {0}", url); Console.ReadLine(); } } } class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR(); } } public class MyHub : Hub { public void Send(string name, string message) { Clients.All.addMessage(name, message); } } }Приведенный выше код включает три класса:
-
Программа, включая метод Main , определяющий основной путь выполнения. В этом методе веб-приложение типа Startup запускается по указанному URL-адресу (
http://localhost:8080). Если для конечной точки требуется безопасность, можно реализовать SSL. Дополнительные сведения см. в статье "Практическое руководство. Настройка порта с помощью SSL-сертификата ". -
Запуск — класс, содержащий конфигурацию сервера SignalR (единственное, что используется в этом руководстве, — это вызов
UseCors) и вызовMapSignalR, который создает маршруты для любых объектов Концентратора в проекте. - MyHub— класс SignalR Hub, который приложение будет предоставлять клиентам. Этот класс имеет один метод Send, который клиенты будут использовать, чтобы отправить сообщение всем остальным подключенным клиентам.
-
Программа, включая метод Main , определяющий основной путь выполнения. В этом методе веб-приложение типа Startup запускается по указанному URL-адресу (
Скомпилируйте и запустите приложение. Адрес, на котором запущен сервер, должен отображаться в окне консоли.
Если выполнение завершается сбоем
System.Reflection.TargetInvocationException was unhandled, необходимо перезапустить Visual Studio с правами администратора.Остановите приложение, прежде чем перейти к следующему разделу.
Доступ к серверу с помощью клиента JavaScript
В этом разделе описано, как использовать тот же клиент JavaScript из руководства по началу работы. Мы вносим только одно изменение в клиент, который заключается в явном определении URL-адреса концентратора. При использовании локального приложения сервер может не обязательно находиться в том же адресе, что и URL-адрес подключения (из-за обратных прокси-серверов и подсистем балансировки нагрузки), поэтому URL-адрес должен быть определен явным образом.
В обозревателе решений щелкните решение правой кнопкой мыши и выберите "Добавить", "Создать проект". Выберите веб-узел и выберите шаблон веб-приложения ASP.NET . Присвойте проекту имя JavascriptClient и нажмите кнопку "ОК".
Выберите пустой шаблон и оставьте остальные параметры не выбранными. Выберите Создать проект.
В консоли диспетчера пакетов выберите проект JavascriptClient в раскрывающемся списке проекта по умолчанию и выполните следующую команду:
Install-Package Microsoft.AspNet.SignalR.JSЭта команда устанавливает библиотеки SignalR и JQuery, необходимые клиенту.
Щелкните проект правой кнопкой мыши и выберите "Добавить", "Создать элемент". Выберите веб-узел и выберите HTML-страницу . Назовите страницу Default.html.
Замените содержимое новой HTML-страницы следующим кодом. Убедитесь, что ссылки на скрипты соответствуют скриптам в папке "Скрипты" проекта.
<!DOCTYPE html> <html> <head> <title>SignalR Simple Chat</title> <style type="text/css"> .container { background-color: #99CCFF; border: thick solid #808080; padding: 20px; margin: 20px; } </style> </head> <body> <div class="container"> <input type="text" id="message" /> <input type="button" id="sendmessage" value="Send" /> <input type="hidden" id="displayname" /> <ul id="discussion"></ul> </div> <!--Script references. --> <!--Reference the jQuery library. --> <script src="Scripts/jquery-1.6.4.min.js"></script> <!--Reference the SignalR library. --> <script src="Scripts/jquery.signalR-2.1.0.min.js"></script> <!--Reference the autogenerated SignalR hub script. --> <script src="http://localhost:8080/signalr/hubs"></script> <!--Add script to update the page and send messages.--> <script type="text/javascript"> $(function () { //Set the hubs URL for the connection $.connection.hub.url = "http://localhost:8080/signalr"; // Declare a proxy to reference the hub. var chat = $.connection.myHub; // Create a function that the hub can call to broadcast messages. chat.client.addMessage = function (name, message) { // Html encode display name and message. var encodedName = $('<div />').text(name).html(); var encodedMsg = $('<div />').text(message).html(); // Add the message to the page. $('#discussion').append('<li><strong>' + encodedName + '</strong>: ' + encodedMsg + '</li>'); }; // Get the user name and store it to prepend to messages. $('#displayname').val(prompt('Enter your name:', '')); // Set initial focus to message input box. $('#message').focus(); // Start the connection. $.connection.hub.start().done(function () { $('#sendmessage').click(function () { // Call the Send method on the hub. chat.server.send($('#displayname').val(), $('#message').val()); // Clear text box and reset focus for next comment. $('#message').val('').focus(); }); }); }); </script> </body> </html>Следующий код (выделенный в приведенном выше примере кода) — это дополнение, которое вы сделали клиенту, используемому в руководстве "Получение звездочек" (помимо обновления кода до бета-версии SignalR версии 2). Эта строка кода явно задает базовый URL-адрес подключения для SignalR на сервере.
//Set the hubs URL for the connection $.connection.hub.url = "http://localhost:8080/signalr";Щелкните правой кнопкой мыши решение и выберите "Задать запускаемые проекты...". Выберите переключатель "Несколько запускаемых проектов " и задайте для обоих проектов действие"Пуск".
Щелкните правой кнопкой мыши "Default.html" и выберите "Задать как начальную страницу".
Запустите приложение. Сервер и страница будут запущены. Возможно, потребуется перезагрузить веб-страницу (или выбрать "Продолжить в отладчике"), если страница загружается до запуска сервера.
В браузере укажите имя пользователя при появлении запроса. Скопируйте URL-адрес страницы на другую вкладку браузера или окно и укажите другое имя пользователя. Вы сможете отправлять сообщения из одной панели браузера в другую, как в руководстве по началу работы.