HttpListener クラス

定義

単純で、プログラムによって制御できる HTTP プロトコル リスナーを提供します。 このクラスは継承できません。

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
継承
HttpListener
実装

次のコード例では、 を使用する方法を HttpListener示します。

// This example requires the System and System.Net namespaces.
public static void SimpleListenerExample(string[] prefixes)
{
    if (!HttpListener.IsSupported)
    {
        Console.WriteLine ("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
        return;
    }
    // URI prefixes are required,
    // for example "http://contoso.com:8080/index/".
    if (prefixes == null || prefixes.Length == 0)
      throw new ArgumentException("prefixes");

    // Create a listener.
    HttpListener listener = new HttpListener();
    // Add the prefixes.
    foreach (string s in prefixes)
    {
        listener.Prefixes.Add(s);
    }
    listener.Start();
    Console.WriteLine("Listening...");
    // Note: The GetContext method blocks while waiting for a request.
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;
    // Obtain a response object.
    HttpListenerResponse response = context.Response;
    // Construct a response.
    string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length;
    System.IO.Stream output = response.OutputStream;
    output.Write(buffer,0,buffer.Length);
    // You must close the output stream.
    output.Close();
    listener.Stop();
}
Public Shared Sub SimpleListenerExample(prefixes As String())
    If Not HttpListener.IsSupported Then
        Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.")
        Return
    End If
    ' URI prefixes are required,
    ' for example "http://contoso.com:8080/index/".
    If prefixes Is Nothing Or prefixes.Length = 0 Then
        Throw New ArgumentException("prefixes")
    End If

    ' Create a listener
    Dim listener = New HttpListener()

    For Each s As String In prefixes
        listener.Prefixes.Add(s)
    Next
    listener.Start()
    Console.WriteLine("Listening...")
    ' Note: The GetContext method blocks while waiting for a request.
    Dim context As HttpListenerContext = listener.GetContext()
    Console.WriteLine("Listening...")
    ' Obtain a response object
    Dim request As HttpListenerRequest = context.Request
    ' Construct a response.
    Dim response As HttpListenerResponse = context.Response
    Dim responseString As String = "<HTML><BODY> Hello world!</BODY></HTML>"
    Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
    ' Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length
    Dim output As System.IO.Stream = response.OutputStream
    output.Write(buffer, 0, buffer.Length)
    'You must close the output stream.
    output.Close()
    listener.Stop()
End Sub

注釈

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

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

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

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

Windows 10の .NET Core 2.0 または .NET Framework 4.6 以降では、オブジェクトによってHttpListener管理される URI プレフィックスでワイルドカード サブドメインがサポートされます。 ワイルドカード サブドメインを指定するには、URI プレフィックスのホスト名の一部として "*" 文字を使用します。 たとえば、 http://*.foo.com/ などです。 これを 引数として メソッドに Add 渡します。 これは、Windows 10の .NET Core 2.0 または .NET Framework 4.6 以降で機能します。以前のバージョンでは、 が生成されますHttpListenerException

警告

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

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

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

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

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

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

注意

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

注意

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

注意

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

HTTP.sys

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

コンストラクター

HttpListener()

HttpListener クラスの新しいインスタンスを初期化します。

プロパティ

AuthenticationSchemes

クライアントの認証に使用する方式を取得または設定します。

AuthenticationSchemeSelectorDelegate

クライアントの認証に使用するプロトコルを確認するために呼び出されるデリゲートを取得または設定します。

DefaultServiceNames

登録済みプレフィックスによって決定される既定のサービス プロバイダー名 (SPN: Service Provider Name) の一覧を取得します。

ExtendedProtectionPolicy

セッションの拡張保護に使用する ExtendedProtectionPolicy を取得または設定します。

ExtendedProtectionSelectorDelegate

各要求に使用する ExtendedProtectionPolicy を決定するために呼び出すデリゲートを取得または設定します。

IgnoreWriteExceptions

Boolean がクライアントに応答を送信したときに発生する例外をアプリケーションで受信するかどうかを指定する HttpListener 値を取得または設定します。

IsListening

HttpListener が開始されているかどうかを示す値を取得します。

IsSupported

現在のオペレーティング システムで HttpListener を使用できるかどうかを示す値を取得します。

Prefixes

この HttpListener オブジェクトによって処理される URI (Uniform Resource Identifier) プレフィックスを取得します。

Realm

この HttpListener オブジェクトに関連付けられているレルム (リソース パーティション) を取得または設定します。

TimeoutManager

この HttpListener インスタンスのタイムアウト マネージャーです。

UnsafeConnectionNtlmAuthentication

NTLM が使用されているときに、同じ TCP (Transmission Control Protocol) 接続を使用した別の要求を認証する必要があるかどうかを制御する Boolean 値を取得または設定します。

メソッド

Abort()

すぐに HttpListener オブジェクトをシャットダウンし、現在キューに置かれているすべての要求を破棄します。

BeginGetContext(AsyncCallback, Object)

受信要求の非同期の取得を開始します。

Close()

HttpListener をシャットダウンします。

EndGetContext(IAsyncResult)

受信クライアント要求を取得する非同期操作を完了します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetContext()

受信要求を待機し、受信するとその要求を返します。

GetContextAsync()

非同期操作として受信要求を待ちます。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Start()

このインスタンスが受信要求を受信できるようにします。

Stop()

このインスタンスは、新しい受信要求の受信を停止し、進行中のすべての要求の処理を終了します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

明示的なインターフェイスの実装

IDisposable.Dispose()

この HttpListener オブジェクトに保持されているリソースを解放します。

適用対象

こちらもご覧ください