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. 在“服务器角色”页上,依次展开“Web 服务器 (IIS)”、“Web 服务器”和“应用程序开发”,然后选择“WebSocket 协议”。 单击 “下一步”
    Screenshot of the Application Development list showing WebSocket Protocol selected.
  5. 在“选择功能”页上,单击“下一步”
  6. “确认安装选择”页上,单击“安装”
  7. 在“结果” 页面中单击“关闭”

Windows 8 或 Windows 8.1

  1. 在“开始”屏幕上,将指针一直移动到左下角,右键单击“开始”按钮,然后单击“控制面板”。 - 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
  2. 依次展开“Internet Information Services”、“万维网服务”和“应用程序开发功能”,然后选择“WebSocket 协议”。
    Screenshot showing the Application Development Features list with multiple selections and WebSocket Protocol highlighted.
  3. 单击“确定”。
  4. 单击“关闭” 。

操作方式

如何使用 IWebSocketContext API

开发人员可以使用 IWebSocketContext API 创建应用程序,通过发送消息流而不是字节流,在客户端和服务器之间实现双向和全双工通信。 IWebSocketContext API 公开读取/写入 WebSocket 数据所需的 API。

如果传入请求要作为 WebSocket 请求接受并随后升级,处理程序必须将响应状态设置为 101。 它应启动 IHttpResponse->Flush,从而触发 IIS WebSocket 模块执行必要的工作,向客户端发送 101 响应。

一旦发送了响应,处理程序就可以通过 IHttpContext3 的 GetNamedContext API 获取指向 IWebSocketContext 的指针。

有关详细信息,请参阅 IWebSocketContext 接口

如何配置 webSocket

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或更高版本:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或更高版本:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,选择要为服务器配置 WebSocket 的服务器名称,或展开“站点”,然后选择一个站点以配置站点的 WebSocket,或展开一个站点,然后选择一个应用程序来为应用程序配置 WebSocket

  3. 在“主页”窗格中,双击“配置编辑器”功能。

  4. 对于站点或应用程序,请在“来自”文本框中选择 Web.config 或 applicationHost.config

  5. 在“部分”文本框中选择 system.webServer/webSocket

  6. enabled 设置为“True”以启用 webSocket 或将其设置为“False”以禁用 webSocket。 将 pingInterval 和 receiveBufferLimit 设置为所需值

    Screenshot of a portion of the Configuration Editor screen with enabled highlighted.

  7. 在“操作”窗格中,单击“应用”

配置

<webSocket> 元素在服务器、站点或应用程序级别配置。

特性

属性 说明
enabled 可选布尔属性。

使服务器应用程序能够通过 WebSocket 协议进行通信。

默认值为 true
pingInterval 可选的 timeSpan 属性。

通过 WebSocket 连接发送 ping 的时间间隔。

默认值为 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 配置这些设置时,必须确保将 commit 参数设置为 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"