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
- タスク バーで [サーバー マネージャー]をクリックします。
- [サーバー マネージャー] で、[管理] メニューを選択し、[役割と機能の追加] を選択します。
- [役割と機能の追加] ウィザードで、[次へ] をクリックします。 インストールの種類を選択し、[次へ] をクリックします。 対象サーバーを選択し、[次へ] をクリックします。
- [サーバーの役割] ページで、[Web サーバー (IIS)]、[Web サーバー]、[アプリケーション開発] の順に展開して、[WebSocket プロトコル] を選びます。 次へ をクリックします。
. - [機能の選択] ページで [次へ] をクリックします。
- [インストール オプションの確認] ページで、[インストール] をクリックします。
- [結果] ページで、 [閉じる]をクリックします。
Windows 8 または Windows 8.1
- [スタート] 画面で、ポインターを左下隅まで移動し、[スタート] ボタンを右クリックし、[コントロール パネル] を選択します。 - [コントロール パネル] で [プログラムと機能] を選択し、[Windows の機能の有効化または無効化] を選択します。
- [インターネット インフォメーション サービス]、[World Wide Web サービス]、[アプリケーション開発機能] の順に展開して、[WebSocket プロトコル] を選択します。
- OK をクリックします。
- 閉じるをクリックします。
操作方法
IWebSocketContext API を使用する方法
開発者は、IWebSocketContext API を使用することで、クライアントとサーバー間の双方向および完全二重通信を実装し、バイトではなくメッセージのストリームを送信するアプリケーションを作成できます。 IWebSocketContext API は、WebSocket データの読み取り/書き込みに必要な API を公開します。
受信要求を WebSocket 要求として受け入れてからアップグレードする場合、ハンドラーは応答状態を 101 に設定する必要があります。 IHttpResponse->Flush を開始する必要があります。これは、IIS WebSocket モジュールをトリガーして、101 応答をクライアントに送信するために必要な作業を実行します。
応答が送信されると、ハンドラーは IHttpContext3 の GetNamedContext API を介して IWebSocketContext へのポインターを取得できます。
詳細については、IWebSocketContext インターフェイスに関するページを参照してください。
webSocket を構成する方法
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
Windows Server 2012 以降を使用している場合:
- タスク バーで、[サーバー マネージャー]、[ツール]、[インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
Windows 8 以降を使用している場合:
- Windows キーを押しながら文字 X を押し、次に [コントロール パネル] をクリックします。
- [管理ツール] をクリックし、次に [インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
[接続] ウィンドウで、サーバーの WebSocket を構成するサーバー名を選択するか、[サイト] を展開してサイトの WebSocket を構成するサイトを選択するか、[サイト] を展開してアプリケーションの WebSocket を構成するアプリケーションを選択します。
[ホーム] ウィンドウで、[構成エディター] 機能をダブルクリックします。
サイトまたはアプリケーションの場合は、[開始] テキスト ボックスで [web.config] または [applicationHost.config] を選択します。
[セクション] テキスト ボックスで [system.webServer/webSocket] を選択します。
webSocket を有効にするには、
enabled
を [True] に設定し、webSocket を無効にするには [False] に設定します。 [pingInterval] と [receiveBufferLimit] を目的の値に設定します。[操作] ペインで [適用] をクリックします。
構成
<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"