WebSocket <webSocket>

概要

<webSocket> 要素は、WebSocket プロトコル経由で通信するサーバー アプリケーションの作成をサポートするために、ASP.NET 4.5 で WebSocketModule モジュールを使用することを指定します。 WebSocket を使用すると、バイト ストリームではなくメッセージ ストリームを使用して、1 つの 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. [インターネット インフォメーション サービス][World Wide Web サービス][アプリケーション開発機能] の順に展開して、[WebSocket プロトコル] を選択します。
    Screenshot showing the Application Development Features list with multiple selections and WebSocket Protocol highlighted.
  3. OK をクリックします。
  4. 閉じるをクリックします。

操作方法

IWebSocketContext API を使用する方法

開発者は、IWebSocketContext API を使用することで、クライアントとサーバー間の双方向および完全二重通信を実装し、バイトではなくメッセージのストリームを送信するアプリケーションを作成できます。 IWebSocketContext API は、WebSocket データの読み取り/書き込みに必要な API を公開します。

受信要求を WebSocket 要求として受け入れてからアップグレードする場合、ハンドラーは応答状態を 101 に設定する必要があります。 IHttpResponse->Flush を開始する必要があります。これは、IIS WebSocket モジュールをトリガーして、101 応答をクライアントに送信するために必要な作業を実行します。

応答が送信されると、ハンドラーは IHttpContext3 の GetNamedContext API を介して IWebSocketContext へのポインターを取得できます。

詳細については、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. webSocket を有効にするには、enabled[True] に設定し、webSocket を無効にするには [False] に設定します。 [pingInterval][receiveBufferLimit] を目的の値に設定します。

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

  7. [操作] ペインで [適用] をクリックします。

構成

<webSocket> 要素は、サーバー、サイト、またはアプリケーションのレベルで構成されます。

属性

属性 説明
enabled 省略可能な Boolean 属性です。

サーバー アプリケーションが 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

Note

AppCmd.exe を使用してこれらの設定を構成する場合は、commit パラメーターを必ず apphost に設定する必要があります。 これにより、ApplicationHost.config ファイルの適切な location セクションに構成設定がコミットされます。

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"