WebSocket <webSocket>

Общие сведения

Элемент <webSocket> задает использование модуля WebSocketModule с ASP.NET 4.5 для поддержки написания серверных приложений, взаимодействующих по протоколу WebSocket. WebSocket позволяет обеспечить полнодуплексную связь по одному TCP-подключению, используя поток сообщений, а не поток байтов. Это упрощает асинхронное подключение к источникам данных в облачных развертываниях.

Совместимость

Версия Примечания
IIS 10.0 Элемент <webSocket> не был изменен в IIS 10.0.
IIS 8,5 Элемент <webSocket> не был изменен в IIS 8.5.
IIS 8,0 Элемент <webSocket> появился в IIS 8.0.
IIS 7,5 Н/Д
IIS 7.0 Н/Д
IIS 6,0 Н/Д

Настройка

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.
  2. В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.
  3. В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.
  4. На странице Роли сервера разверните узел Веб-сервер (IIS),веб-сервер, узел Разработка приложений, а затем выберите Протокол WebSocket. Щелкните Далее.
    Снимок экрана: список разработки приложений с выбранным протоколом WebSocket. .
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления. — В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  2. Разверните узел Службы IIS, Веб-службы, Функции разработки приложений, а затем выберите Протокол WebSocket.
    Снимок экрана: список функций разработки приложений с несколькими выбранными параметрами и выделенным протоколом WebSocket.
  3. Нажмите кнопку ОК.
  4. Щелкните Закрыть.

Инструкции

Использование API IWebSocketContext

Разработчики могут использовать API IWebSocketContext для создания приложений, реализующих двунаправленные и полностью дуплексные связи между клиентом и сервером, отправляя потоки сообщений вместо байтов. API IWebSocketContext предоставляет необходимые API для чтения и записи данных WebSocket.

Если входящий запрос должен быть принят как запрос WebSocket и впоследствии обновлен, обработчик должен задать состояние ответа 101. Он должен инициировать IHttpResponse-Flush>, который активирует модуль IIS WebSocket, чтобы выполнить необходимую работу по отправке ответа 101 клиенту.

После отправки ответа обработчик может получить указатель на IWebSocketContext с помощью API GetNamedContext3.

Дополнительные сведения см. в разделе Интерфейс IWebSocketContext.

Настройка webSocket

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или более поздней версии:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или более поздней версии:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения выберите имя сервера, чтобы настроить WebSocket для сервера, или разверните узел Сайты , а затем выберите сайт для настройки WebSocket для сайта или разверните сайт, а затем выберите приложение для настройки WebSocket для приложения.

  3. На панели Главная дважды щелкните компонент Редактор конфигурации .

  4. Для сайта или приложения выберите web.config или applicationHost.config в текстовом поле От .

  5. Выберите system.webServer/webSocket в текстовом поле Раздел .

  6. Установите enabled значение True , чтобы включить webSocket, или False , чтобы отключить webSocket. Задайте для pingInterval и receiveBufferLimit нужные значения.

    Снимок экрана: часть экрана редактора конфигурации с выделенным параметром

  7. Щелкните Применить в области Действия.

Конфигурация

Элемент <webSocket> настраивается на уровне сервера, сайта или приложения.

Атрибуты

Атрибут Описание
enabled Дополнительный логический атрибут.

Позволяет серверным приложениям обмениваться данными по протоколу WebSocket.

Значение по умолчанию — true.
pingInterval Необязательный атрибут timeSpan.

Интервал отправки связи через подключение WebSocket.

Значение по умолчанию — 00:00:00.
receiveBufferLimit Необязательный атрибут uint.

Максимальный размер буфера приема для подключения WebSocket.

Значение по умолчанию — 4194304.

Дочерние элементы

Отсутствует.

Образец конфигурации

В следующем примере отображается <элемент webSocket> .

<system.webServer>
   <webSocket
      enabled="true" 
      receiveBufferLimit="4194304"
      pingInterval="00:01:00">
   </webSocket>
</system.webServer>

Пример кода

Следующий пример кода настраивает <webSocket> для сайта.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/webSocket /enabled:"True" /receiveBufferLimit:"4194304" /pingInterval:"00:00:10"  /commit:apphost

Примечание

При использовании AppCmd.exe для настройки этих параметров необходимо обязательно задать для параметра фиксации значение apphost . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

    private static void Main() {
        
        using(ServerManager serverManager = new ServerManager()) { 
            Configuration config = serverManager.GetApplicationHostConfiguration();
            
            ConfigurationSection webSocketSection = config.GetSection("system.webServer/webSocket", "Default Web Site");
            webSocketSection["enabled"] = true;
            webSocketSection["receiveBufferLimit"] = 4194304;
            webSocketSection["pingInterval"] = TimeSpan.Parse("00:00:10");
            
            serverManager.CommitChanges();
        }
    }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim webSocketSection As ConfigurationSection = config.GetSection("system.webServer/webSocket", "Default Web Site")
      webSocketSection("enabled") = true
      webSocketSection("receiveBufferLimit") = 4194304
      webSocketSection("pingInterval") = TimeSpan.Parse("00:00:10")
      serverManager.CommitChanges
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var webSocketSection = adminManager.GetAdminSection("system.webServer/webSocket", "MACHINE/WEBROOT/APPHOST/Default Web Site");
webSocketSection.Properties.Item("enabled").Value = true;
webSocketSection.Properties.Item("receiveBufferLimit").Value = 4194304;
webSocketSection.Properties.Item("pingInterval").Value = "00:00:10";

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set webSocketSection = adminManager.GetAdminSection("system.webServer/webSocket", "MACHINE/WEBROOT/APPHOST/Default Web Site")
webSocketSection.Properties.Item("enabled").Value = true
webSocketSection.Properties.Item("receiveBufferLimit").Value = 4194303
webSocketSection.Properties.Item("pingInterval").Value = "00:00:20"

adminManager.CommitChanges()

PowerShell

Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/webSocket" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/webSocket" -name "receiveBufferLimit" -value 4194303
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/webSocket" -name "pingInterval" -value "00:00:20"