System.Net.HttpListener クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

このクラスを HttpListener 使用すると、HTTP 要求に応答する単純な HTTP プロトコル リスナーを作成できます。 リスナーはオブジェクトの HttpListener 有効期間中アクティブであり、そのアクセス許可を持つアプリケーション内で実行されます。

使用 HttpListenerするには、コンストラクターを使用してクラスの新しいインスタンスを HttpListener 作成し、プロパティを Prefixes 使用して、処理する必要がある URI (Uniform Resource Identifier) プレフィックスを指定する文字列を保持するコレクションに HttpListener アクセスします。

URI プレフィックス文字列は、スキーム (http または https)、ホスト、オプションのポート、および省略可能なパスで構成されます。 完全なプレフィックス文字列の例を次に示します http://www.contoso.com:8080/customerData/。 プレフィックスはスラッシュ ("/") で終わる必要があります。 HttpListener要求された URI に最も近いプレフィックスを持つオブジェクトが、要求に応答します。 複数の HttpListener オブジェクトが同じプレフィックスを追加することはできません。既に使用されているプレフィックス Win32ExceptionHttpListener 追加されると、例外がスローされます。

ポートが指定されている場合、ホスト要素を "*" に置き換えて、要求された URI が HttpListener 他のプレフィックスと一致しない場合にポートに送信された要求を受け入れることを示すことができます。 たとえば、要求された URI が処理 HttpListenerされないときにポート 8080 に送信されたすべての要求を受信するには、プレフィックスは http://*:8080/です。 同様に、ポートに送信されたすべての要求を HttpListener 受け入れるように指定するには、ホスト要素を "+" 文字に置き換えます。 たとえば、https://+:8080 のようにします。 "*" 文字と "+" 文字は、パスを含むプレフィックスに含めることができます。

Wildカード subdoメイン は、オブジェクトによって管理される URI プレフィックスでHttpListenerサポートされます。 ワイルドカードサブドメインを指定するにはメイン URI プレフィックスのホスト名の一部として "*" 文字を使用します。 たとえば、 http://*.foo.com/。 これを引数としてメソッドに Add 渡します。

警告

最上位レベルのワイルドカード バインド (http://*:8080/ およびhttp://+:8080) は使用しないでください。 最上位のワイルドカードのバインドは、セキュリティの脆弱性に対してアプリを切り開くことができます。 これは、強力と脆弱の両方のワイルドカードに適用されます。 ワイルドカードではなく、明示的なホスト名を使用します。 全体の親ドメインを制御する場合、サブドメイン ワイルドカード バインド (たとえば、*.mysub.com) にこのセキュリティ リスクはありません (脆弱である *.com とは対照的)。 詳細については、rfc7230 セクション-5.4 を参照してください。

クライアントからの要求のリッスンを開始するには、URI プレフィックスをコレクションに追加し、メソッドを Start 呼び出します。 HttpListener には、クライアント要求を処理するための同期モデルと非同期モデルの両方が用意されています。 要求とそれに関連する応答には、メソッドまたはその非同期の対応するメソッドによってGetContext返されるオブジェクト、およびEndGetContextメソッドをBeginGetContext使用してHttpListenerContextアクセスされます。

同期モデルは、クライアント要求の待機中にアプリケーションをブロックする必要があり、一度に 1 つの要求のみを処理する場合に適しています。 同期モデルを使用して、クライアントが要求を GetContext 送信するのを待機するメソッドを呼び出します。 このメソッドは、オブジェクトが HttpListenerContext 発生したときに処理するためにオブジェクトを返します。

より複雑な非同期モデルでは、要求の待機中にアプリケーションがブロックされず、各要求は独自の実行スレッドで処理されます。 このメソッドを BeginGetContext 使用して、受信要求ごとに呼び出されるアプリケーション定義メソッドを指定します。 そのメソッド内で、メソッドを EndGetContext 呼び出して要求を取得し、処理し、応答します。

どちらのモデルでも、受信要求はプロパティを HttpListenerContext.Request 使用してアクセスされ、オブジェクトによって HttpListenerRequest 表されます。 同様に、応答はプロパティを HttpListenerContext.Response 使用してアクセスされ、オブジェクトによって HttpListenerResponse 表されます。 これらのオブジェクトは、一部の機能を HttpWebRequest オブジェクトと HttpWebResponse 共有しますが、後者のオブジェクトは、サーバーではなくクライアントの動作を実装するため、組み合わせて HttpListener 使用することはできません。

クライアント HttpListener 認証が必要な場合があります。 認証に使用する特定のスキームを指定することも、使用するスキームを決定するデリゲートを指定することもできます。 クライアントの ID に関する情報を取得するには、何らかの形式の認証が必要です。 詳細については、「、、、およびAuthenticationSchemeSelectorDelegateプロパティ」をUserAuthenticationSchemes参照してください。

Note

using https を作成する HttpListener 場合は、そのリスナーのサーバー証明書を選択する必要があります。 それ以外の場合、これに HttpListener 対する要求は、予期しない接続の終了で失敗します。

Note

Network Shell (netsh.exe) を使用して、サーバー証明書とその他のリスナー オプションを構成できます。 詳細については、 Network Shell (Netsh) を参照してください。 実行可能ファイルは、Windows Server 2008 と Windows Vista との出荷を開始しました。

Note

複数の認証スキームをHttpListener指定した場合、リスナーは次の順序でクライアントにチャレンジします。 NegotiateNTLMDigestBasic

HTTP.sys

このクラスは HttpListener 、Windows のすべての HTTP トラフィックを処理するカーネル モード リスナーを基 HTTP.sysに構築されています。 HTTP.sys では、接続管理、帯域幅調整、および Web サーバーのログ記録が提供されます。 HttpCfg.exe ツールを使用して SSL 証明書を追加します。