HttpListener HttpListener HttpListener HttpListener Class


単純で、プログラムによって制御できる HTTP プロトコル リスナーを提供します。Provides a simple, programmatically controlled HTTP protocol listener. このクラスは継承できません。This class cannot be inherited.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable

次のコード例に示しますを使用して、HttpListenerします。The following code example demonstrates using a 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.");
    // URI prefixes are required,
    // for example "".
    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)
    // 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;
    // You must close the output stream.
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.")
    End If
    ' URI prefixes are required,
    ' for example "".
    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
    ' Note: The GetContext method blocks while waiting for a request.
    Dim context As HttpListenerContext = listener.GetContext()
    ' 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.
End Sub


使用して、HttpListenerクラス、HTTP 要求に応答する簡単な HTTP プロトコル リスナーを作成することができます。Using the HttpListener class, you can create a simple HTTP protocol listener that responds to HTTP requests. 有効期間にわたって、リスナーがアクティブ、HttpListenerオブジェクトとそのアクセス許可を使用してアプリケーション内で実行します。The listener is active for the lifetime of the HttpListener object and runs within your application with its permissions.

使用するHttpListenerを使用して、クラスの新しいインスタンスを作成、HttpListenerコンス トラクターと使用、Prefixesする Uniform Resource Identifier (URI) を指定する文字列を保持するコレクションにアクセスするプロパティのプレフィックス、 HttpListener処理する必要があります。To use HttpListener, create a new instance of the class using the HttpListener constructor and use the Prefixes property to gain access to the collection that holds the strings that specify which Uniform Resource Identifier (URI) prefixes the HttpListener should process.

URI プレフィックス文字列は、スキーム (http または https)、ホスト、任意のポート、およびオプションのパスで構成されます。A URI prefix string is composed of a scheme (http or https), a host, an optional port, and an optional path. 完全なプレフィックス文字列の例は、 します。An example of a complete prefix string is プレフィックスは、スラッシュ (「/」) で終わる必要があります。Prefixes must end in a forward slash ("/"). HttpListenerに要求された URI に最も近いプレフィックスを持つオブジェクトが要求に応答します。The HttpListener object with the prefix that most closely matches a requested URI responds to the request. 複数HttpListenerオブジェクトが同じプレフィックスを追加できません。 つまり、Win32Exception例外がスローされます、HttpListener既に存在するプレフィックスを使用して追加します。Multiple HttpListener objects cannot add the same prefix; a Win32Exception exception is thrown if a HttpListener adds a prefix that is already in use.

ホスト要素を置き換えることが、ポートを指定すると、"*"ことを示す、HttpListener要求された URI がその他の任意のプレフィックスと一致しない場合に、ポートに送信される要求を受け入れます。When a port is specified, the host element can be replaced with "*" to indicate that the HttpListener accepts requests sent to the port if the requested URI does not match any other prefix. たとえば、すべての要求を受信するポート 8080 が要求された URI がいずれかで処理されないときに送信HttpListener、プレフィックスがhttp://*: 8080/ します。For example, to receive all requests sent to port 8080 when the requested URI is not handled by any HttpListener, the prefix is http://*:8080/. 同様に、ことを指定する、HttpListenerポートに送信されたすべての要求を受け入れるホスト要素を「+」文字に置き換えます。Similarly, to specify that the HttpListener accepts all requests sent to a port, replace the host element with the "+" character. たとえば、https://+:8080 です。For example, https://+:8080. "*"と「+」文字は、インクルード パスのプレフィックスに使用できます。The "*" and "+" characters can be present in prefixes that include paths.

.NET Core 2.0 または Windows 10 で .NET Framework 4.6 以降で管理されている URI プレフィックスでサブドメインのワイルドカードはサポートされて、HttpListenerオブジェクト。Starting with .NET Core 2.0 or .NET Framework 4.6 on Windows 10, wildcard subdomains are supported in URI prefixes that are managed by an HttpListener object. ワイルドカード サブドメインを指定するには、使用、"*"URI プレフィックスのホスト名の一部として文字。To specify a wildcard subdomain, use the "*" character as part of the hostname in a URI prefix. たとえば、 http://* します。For example, http://* これを引数として渡す、Addメソッド。Pass this as the argument to the Add method. これは、.NET Core 2.0 または Windows 10; での .NET Framework 4.6 の時点で機能します。以前のバージョンでこれを生成、HttpListenerExceptionします。This works as of .NET Core 2.0 or .NET Framework 4.6 on Windows 10; in earlier versions, this generates an HttpListenerException.


最上位のワイルドカードのバインド (http://*: 8080/http://+:8080) する必要がありますいない使用します。Top-level wildcard bindings (http://*:8080/ and http://+:8080) should not be used. 最上位のワイルドカードのバインドは、セキュリティの脆弱性に対してアプリを切り開くことができます。Top-level wildcard bindings can open up your app to security vulnerabilities. これは、強力と脆弱の両方のワイルドカードに適用されます。This applies to both strong and weak wildcards. ワイルドカードではなく、明示的なホスト名を使用します。Use explicit host names rather than wildcards. 全体の親ドメインを制御する場合、サブドメイン ワイルドカード バインド (たとえば、* にこのセキュリティ リスクはありません (脆弱である *.com とは対照的)。Subdomain wildcard binding (for example, * doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). 詳細については、rfc7230 セクション-5.4 を参照してください。See rfc7230 section-5.4 for more information.

クライアントからの要求のリッスンを開始するには、コレクションと呼び出しに URI プレフィックスを追加、Startメソッド。To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListener クライアント要求を処理するための同期および非同期の両方のモデルを提供します。HttpListener offers both synchronous and asynchronous models for processing client requests. 要求とその関連付けられた応答を使用してアクセス、HttpListenerContextによって返されるオブジェクト、GetContextメソッドまたは対応する非同期、BeginGetContextEndGetContextメソッド。Requests and their associated responses are accessed using the HttpListenerContext object returned by the GetContext method or its asynchronous counterparts, the BeginGetContext and EndGetContext methods.

同期モデルは、クライアント要求の待機中に、アプリケーションをブロックする必要があり、一度に 1 つの要求を処理する場合に適しています。The synchronous model is appropriate if your application should block while waiting for a client request and if you want to process only one request at a time. 同期モデルを使用して、呼び出し、GetContextメソッドで、クライアント要求を送信するを待ちます。Using the synchronous model, call the GetContext method, which waits for a client to send a request. メソッドを返します、HttpListenerContextが発生したときに 1 つの処理をするオブジェクトします。The method returns an HttpListenerContext object to you for processing when one occurs.

複雑な非同期モデルで、独自の実行スレッドで処理が要求や各要求の待機中に、アプリケーションはブロックされません。In the more complex asynchronous model, your application does not block while waiting for requests and each request is processed in its own execution thread. 使用して、BeginGetContext受信要求ごとに呼び出されるアプリケーション定義のメソッドを指定します。Use the BeginGetContext method to specify an application-defined method to be called for each incoming request. そのメソッド内で、EndGetContext要求を取得、処理、および対応するメソッド。Within that method, call the EndGetContext method to obtain the request, process it, and respond.

どちらのモデルでは、受信要求にアクセスを使用して、HttpListenerContext.Requestによって表されるプロパティとはHttpListenerRequestオブジェクト。In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. 同様に、応答はアクセスを使用して、HttpListenerContext.Responseによって表されるプロパティとはHttpListenerResponseオブジェクト。Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. これらのオブジェクトは、一部の機能を共有、HttpWebRequestHttpWebResponseオブジェクトではなく、後者のオブジェクトを組み合わせて使用することはできませんHttpListenerクライアント、サーバー、動作しないを実装するためです。These objects share some functionality with the HttpWebRequest and HttpWebResponse objects, but the latter objects cannot be used in conjunction with HttpListener because they implement client, not server, behaviors.

HttpListenerクライアント認証を要求できます。An HttpListener can require client authentication. 認証に使用する特定のスキームを指定するか、または使用するスキームを決定するデリゲートを指定することができます。You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. クライアントの id に関する情報を取得する認証の何らかの形式を必要とする必要があります。You must require some form of authentication to obtain information about the client's identity. 詳細については、次を参照してください。、 UserAuthenticationSchemes、およびAuthenticationSchemeSelectorDelegateプロパティ。For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.


作成する場合、 HttpListener https を使用して、選択してくださいサーバー証明書をそのリスナー。If you create an HttpListener using https, you must select a Server Certificate for that listener. それ以外の場合、HttpWebRequestこのクエリHttpListener接続の予期しない終了が失敗します。Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.


ネットワーク シェル (netsh.exe) を使用して、サーバー証明書とその他のリスナー オプションを構成できます。You can configure Server Certificates and other listener options by using Network Shell (netsh.exe). 参照してくださいネットワーク シェル (Netsh)の詳細。See Network Shell (Netsh) for more details. 実行可能ファイルは、Windows Server 2008 および Windows Vista での出荷を開始します。The executable began shipping with Windows Server 2008 and Windows Vista.


複数の認証方式を指定する場合、 HttpListener、リスナーの次の順序でのクライアントは課題: NegotiateNTLMDigest、しBasicします。If you specify multiple authentication schemes for the HttpListener, the listener will challenge clients in the following order: Negotiate, NTLM, Digest, and then Basic.


HttpListener() HttpListener() HttpListener() HttpListener()

HttpListener クラスの新しいインスタンスを初期化します。Initializes a new instance of the HttpListener class.


AuthenticationSchemes AuthenticationSchemes AuthenticationSchemes AuthenticationSchemes

クライアントの認証に使用する方式を取得または設定します。Gets or sets the scheme used to authenticate clients.

AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate

クライアントの認証に使用するプロトコルを確認するために呼び出されるデリゲートを取得または設定します。Gets or sets the delegate called to determine the protocol used to authenticate clients.

DefaultServiceNames DefaultServiceNames DefaultServiceNames DefaultServiceNames

登録済みプレフィックスによって決定される既定のサービス プロバイダー名 (SPN: Service Provider Name) の一覧を取得します。Gets a default list of Service Provider Names (SPNs) as determined by registered prefixes.

ExtendedProtectionPolicy ExtendedProtectionPolicy ExtendedProtectionPolicy ExtendedProtectionPolicy

セッションの拡張保護に使用する ExtendedProtectionPolicy を取得または設定します。Gets or sets the ExtendedProtectionPolicy to use for extended protection for a session.

ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate

各要求に使用する ExtendedProtectionPolicy を決定するために呼び出すデリゲートを取得または設定します。Gets or sets the delegate called to determine the ExtendedProtectionPolicy to use for each request.

IgnoreWriteExceptions IgnoreWriteExceptions IgnoreWriteExceptions IgnoreWriteExceptions

HttpListener がクライアントに応答を送信したときに発生する例外をアプリケーションで受信するかどうかを指定する Boolean 値を取得または設定します。Gets or sets a Boolean value that specifies whether your application receives exceptions that occur when an HttpListener sends the response to the client.

IsListening IsListening IsListening IsListening

HttpListener が開始されているかどうかを示す値を取得します。Gets a value that indicates whether HttpListener has been started.

IsSupported IsSupported IsSupported IsSupported

現在のオペレーティング システムで HttpListener を使用できるかどうかを示す値を取得します。Gets a value that indicates whether HttpListener can be used with the current operating system.

Prefixes Prefixes Prefixes Prefixes

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

Realm Realm Realm Realm

この HttpListener オブジェクトに関連付けられているレルム (リソース パーティション) を取得または設定します。Gets or sets the realm, or resource partition, associated with this HttpListener object.

TimeoutManager TimeoutManager TimeoutManager TimeoutManager

この HttpListener インスタンスのタイムアウト マネージャーです。The timeout manager for this HttpListener instance.

UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication

NTLM が使用されているときに、同じ TCP (Transmission Control Protocol) 接続を使用した別の要求を認証する必要があるかどうかを制御する Boolean 値を取得または設定します。Gets or sets a Boolean value that controls whether, when NTLM is used, additional requests using the same Transmission Control Protocol (TCP) connection are required to authenticate.


Abort() Abort() Abort() Abort()

すぐに HttpListener オブジェクトをシャットダウンし、現在キューに置かれているすべての要求を破棄します。Shuts down the HttpListener object immediately, discarding all currently queued requests.

BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object)

受信要求の非同期の取得を開始します。Begins asynchronously retrieving an incoming request.

Close() Close() Close() Close()

HttpListener をシャットダウンします。Shuts down the HttpListener.

EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) EndGetContext(IAsyncResult)

受信クライアント要求を取得する非同期操作を完了します。Completes an asynchronous operation to retrieve an incoming client request.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetContext() GetContext() GetContext() GetContext()

受信要求を待機し、受信するとその要求を返します。Waits for an incoming request and returns when one is received.

GetContextAsync() GetContextAsync() GetContextAsync() GetContextAsync()

非同期操作として受信要求を待ちます。Waits for an incoming request as an asynchronous operation.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
Start() Start() Start() Start()

このインスタンスが受信要求を受信できるようにします。Allows this instance to receive incoming requests.

Stop() Stop() Stop() Stop()

このインスタンスの受信要求の受信を停止します。Causes this instance to stop receiving incoming requests.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)


IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

この HttpListener オブジェクトに保持されているリソースを解放します。Releases the resources held by this HttpListener object.