トランスポート クォータ
トランスポート クォータは、接続がリソースを過剰に消費している時期を特定するポリシー機構です。 クォータとは、クォータ値を超えた場合に、それ以上のリソースの使用を禁止する確実な制限です。 トランスポート クォータは、悪質な、または意図的でないサービス拒否攻撃を防ぎます。
Windows Communication Foundation (WCF) トランスポートのクォータの既定値は、控えめなリソース割り当てに基づいています。 これらの既定値は開発環境、および小規模のインストール シナリオに適しています。 インストールでリソースが不足している場合、または追加リソースが使用可能であるにもかかわらず接続が制限されている場合、サービス管理者は、トランスポート クォータをレビューし、個別のクォータ値を調整する必要があります。
トランスポート クォータの種類
WCF のトランスポートには、次の 3 種類のクォータがあります。
"タイムアウト" では、長時間リソースを停滞させることによるサービス拒否攻撃が軽減されます。
"メモリ割り当ての制限" では、単一の接続によってシステム メモリが消耗され、他の接続へのサービス拒否が発生することが防止されます。
"コレクション サイズの制限" では、間接的にメモリを割り当てる、または供給に制限のあるリソースの消費が抑制されます。
トランスポート クォータの説明
このセクションでは、WCF の標準トランスポートである HTTP(S)、TCP/IP、および名前つきパイプで利用できるトランスポート クォータについて説明します。 カスタム トランスポートでは、このリストに含まれない独自の構成可能なクォータを公開できます。 カスタム トランスポートのクォータについては、ドキュメントを参照してください。
各クォータ設定では、種類、最小値、および既定値を設定します。 クォータの最大値は、クォータの種類によって制限されます。 コンピューターの制限により、クォータを最大値に設定できない場合もあります。
名前 | 種類 | 最小 値 |
Default value |
説明 |
---|---|---|---|---|
ChannelInitializationTimeout |
TimeSpan | 1 目盛り | 5 秒 | 最初の読み取り中に、接続が前文の送信を待機する最大時間。 このデータは、認証が行われる前に受信されます。 この設定は一般に、ReceiveTimeout クォータ値よりも大幅に小さな値になります。 |
CloseTimeout |
TimeSpan | 0 | 1 分 | 接続の終了を待機する最大時間。これを超えるとトランスポートで例外が発生します。 |
ConnectionBufferSize |
Integer | 1 | 8 KB | 基となるトランスポートの送信および受信バッファーのサイズ (バイト単位)。 サイズの大きなメッセージを送信する場合、バッファー サイズを増やすとスループットを向上させることができます。 |
IdleTimeout |
TimeSpan | 0 | 2 分 | プールされた接続が閉じられるまで、アイドル状態を維持できる最大時間。 この設定はプールされた接続にのみ適用されます。 |
LeaseTimeout |
TimeSpan | 0 | 5 分 | プールされたアクティブな接続の最長有効期間。 指定した期間が経過すると、現在の要求の処理後、接続は閉じられます。 この設定はプールされた接続にのみ適用されます。 |
ListenBacklog |
Integer | 1 | 10 | リスナーで未処理にできる接続の最大数。エンドポイントへの接続がこれ以上増加すると拒否されます。 |
MaxBufferPoolSize |
Long | 0 | 512 KB | トランスポートで再使用可能なメッセージ バッファーのプール専用にするメモリの最大値 (バイト単位)。 プールがメッセージ バッファーを供給できない場合、新しいバッファーが一時的な使用のために割り当てられます。 多数のチャネル ファクトリまたはリスナーを作成するインストールでは、バッファー プールに多くのメモリが割り当てられることがあります。 このバッファー サイズを縮小すると、このシナリオにおけるメモリ使用量を大幅に削減できることがあります。 |
MaxBufferSize |
Integer | 1 | 64 KB | ストリーミング データ用に使用されるバッファーの最大サイズ (バイト単位)。 このトランスポート クォータが設定されていない、またはトランスポートがストリーミングを使用しない場合、このクォータ値は MaxReceivedMessageSize クォータ値と MaxValue の小さい方と同じになります。 |
MaxOutboundConnectionsPerEndpoint |
Integer | 1 | 10 | 特定のエンドポイントに関連付けることのできる送信接続の最大数。 この設定はプールされた接続にのみ適用されます。 |
MaxOutputDelay |
TimeSpan | 0 | 200 ミリ秒 | 送信操作後に 1 回の操作で追加メッセージをバッチ処理するために待機する最大時間。 基になるトランスポートのバッファーがいっぱいになると、メッセージはより早い時期に送信されます。 追加のメッセージの送信によって遅延時間がリセットされることはありません。 |
MaxPendingAccepts |
Integer | 1 | 1 | リスナーで待機状態にできるチャネルの受け入れの最大数。 受け入れの完了と新しい受け入れの開始との間には、時間的な間隔があります。 このコレクション サイズを大きくすると、この時間間隔内に接続するクライアントが切断されるのを防ぎます。 |
MaxPendingConnections |
Integer | 1 | 10 | アプリケーションによる受け入れをリスナーで待機できる最大接続数。 このクォータ値を超過すると、新規の受信接続は受け入れられるのを待機せずに切断されます。 メッセージ セキュリティのような接続機能では、クライアントは複数の接続を開くことがあります。 このクォータ値を設定する場合、サービス管理者はこのような追加の接続も考慮する必要があります。 |
MaxReceivedMessageSize |
Long | 1 | 64 KB | ヘッダーを含む、受信メッセージの最大サイズ (バイト単位)。これを超えるとトランスポートで例外が発生します。 |
OpenTimeout |
TimeSpan | 0 | 1 分 | 接続の確立を待機する最大時間。これを超えるとトランスポートで例外が発生します。 |
ReceiveTimeout |
TimeSpan | 0 | 10 分 | 読み取り操作の完了を待機する最大時間。これを超えるとトランスポートで例外が発生します。 |
SendTimeout |
Timespan | 0 | 1 分 | 書き込み操作の完了を待機する最大時間。これを超えるとトランスポートで例外が発生します。 |
トランスポート クォータ MaxPendingConnections
および MaxOutboundConnectionsPerEndpoint
は、バインディングまたは構成を使用して設定される場合には、MaxConnections
トランスポート クォータと呼ばれる単一のクォータに結合されます。 これらのクォータ値を個別に設定できるのは、バインド要素に限られます。 MaxConnections
トランスポート クォータでは、最小値と既定値が同じになります。
トランスポート クォータの設定
トランスポート クォータは、トランスポート バインド要素、トランスポート バンディング、アプリケーション構成、またはホスト ポリシーを介して設定されます。 このドキュメントでは、ホスト ポリシーを介したトランスポートの設定については説明しません。 ホスト ポリシー クォータの設定については、基になるトランスポートのドキュメントを参照してください。 「HTTP および HTTPS の構成」のトピックでは、Http.sys ドライバーのクォータ設定について説明します。 HTTP、TCP/IP、および名前付きパイプの接続で Windows の制限を構成する詳細については、マイクロソフト サポート技術情報を検索してください。
他の種類のクォータは、トランスポートへ間接的に適用されます。 トランスポートがメッセージをバイトに変換するために使用するメッセージ エンコーダーには、独自のクォータ設定があります。 ただし、これらのクォータは使用されているトランスポートの種類に依存しません。
バインド要素によるトランスポート クォータの制御
バインド要素を介してトランスポート クォータを設定した場合、トランスポートの動作を最も柔軟に制御できます。 閉じる、開く、受信、送信の各操作の既定のタイムアウトは、チャネルを構築したときにバインディングから設定されます。
名前 | HTTP | TCP/IP | 名前付きパイプ |
---|---|---|---|
ChannelInitializationTimeout |
X | X | |
CloseTimeout |
|||
ConnectionBufferSize |
X | X | |
IdleTimeout |
X | X | |
LeaseTimeout |
X | ||
ListenBacklog |
X | ||
MaxBufferPoolSize |
X | X | X |
MaxBufferSize |
X | X | X |
MaxOutboundConnectionsPerEndpoint |
X | X | |
MaxOutputDelay |
X | X | |
MaxPendingAccepts |
X | X | |
MaxPendingConnections |
X | X | |
MaxReceivedMessageSize |
X | X | X |
OpenTimeout |
|||
ReceiveTimeout |
|||
SendTimeout |
バインディングによるトランスポート クォータの制御
バインディングによるトランスポート クォータの設定では、選択対象のクォータがセットにまとめられます。ただし、最も一般的に使用するクォータ値にはアクセスできます。
名前 | HTTP | TCP/IP | 名前付きパイプ |
---|---|---|---|
ChannelInitializationTimeout |
|||
CloseTimeout |
X | X | X |
ConnectionBufferSize |
|||
IdleTimeout |
|||
LeaseTimeout |
|||
ListenBacklog |
X | ||
MaxBufferPoolSize |
X | X | X |
MaxBufferSize |
1 | x | x |
MaxOutboundConnectionsPerEndpoint |
2 | 2 | |
MaxOutputDelay |
|||
MaxPendingAccepts |
|||
MaxPendingConnections |
2 | 2 | |
MaxReceivedMessageSize |
x | X | X |
OpenTimeout |
X | X | X |
ReceiveTimeout |
X | X | X |
SendTimeout |
X | X | X |
MaxBufferSize
トランスポート クォータは、BasicHttp
バインディングでのみ使用可能です。WSHttp
バインディングは、ストリーミング トランスポート モードがサポートされないシナリオに対応します。トランスポート クォータ
MaxPendingConnections
およびMaxOutboundConnectionsPerEndpoint
は、MaxConnections
トランスポート クォータと呼ばれる単一のクォータに結合されます。
構成によるトランスポート クォータの制御
アプリケーション構成からバインディング上のプロパティに直接アクセスして、同じトランスポート クォータを設定できます。 構成ファイルでは、トランスポート クォータの名前は必ず小文字で始めます。 たとえば、バインディングの CloseTimeout
プロパティは構成では closeTimeout
設定に対応し、バインディングの MaxConnections
プロパティは構成では maxConnections
設定に対応します。