HttpListener Osztály

Definíció

Egyszerű, programozott http protokoll-figyelőt biztosít. Ez az osztály nem örökölhető.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Öröklődés
HttpListener
Megvalósítás

Példák

// 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

Megjegyzések

Az HttpListener osztály használatával létrehozhat egy egyszerű HTTP protokollfigyelőt, amely válaszol a HTTP-kérelmekre. A figyelő aktív a HttpListener objektum teljes élettartama alatt, és alkalmazáson belül fut a saját engedélyeivel.

A HttpListener használatához hozzon létre az osztály egy új példányát a HttpListener konstruktor használatával, és használja a Prefixes tulajdonságot a gyűjteményhez való hozzáféréshez, amely tartalmazza azokat a karakterláncokat, amelyek meghatározzák, hogy mely egységes erőforrás-azonosító (URI) előtagokat kell a HttpListener-nek feldolgoznia.

Az URI előtag egy sémából (http vagy https), egy gazdagépből, egy opcionális portból és egy opcionális elérési útból áll. Példa egy teljes előtag-sztringre: http://www.contoso.com:8080/customerData/. Az előtagok perjelben végződnek ("/"). A HttpListener kért URI-nak leginkább megfelelő előtaggal rendelkező objektum válaszol a kérésre. Több HttpListener objektum nem tudja hozzáadni ugyanazt az előtagot; Win32Exception kivételt eredményez, ha egy HttpListener már használatban lévő előtagot ad hozzá.

Port megadásakor a gazdagépelem lecserélhető a "*"-ra, hogy jelezze, hogy a HttpListener portra küldött kérelmeket fogadja el, ha a kért URI nem egyezik más előtaggal. Ha például a 8080-as portra küldött összes kérést fogadni szeretné, ha a kért URI-t egyik sem HttpListenerkezeli, az előtag http://*:8080/. Hasonlóképpen, ha meg szeretné adni, hogy a HttpListener portra küldött összes kérést elfogadja, cserélje le a gazdagépelemet a "+" karakterre. Például: https://+:8080. A "*" és a "+" karakter szerepelhet az elérési utakat tartalmazó előtagokban.

A HttpListener objektum által kezelt URI-előtagokban támogatottak a helyettesítő karakterek altartományai. Helyettesítő karakteres altartományt úgy adhat meg, hogy a „*” karaktert használja egy URI-előtag hosztnevének részeként. Például http://*.foo.com/. Adja át ezt argumentumként a Add metódusnak.

Warning

A felső szintű helyettesítő karakterek (http://*:8080/ és http://+:8080) nem használhatók. A legfelső szintű helyettesítő karakterek kötései megnyithatják az alkalmazást a biztonsági rések előtt. Ez az erős és a gyenge joker karakterekre is vonatkozik. Használjon explicit gazdagépneveket csillag karakterek helyett. Az altartomány helyettesítő karakteres kötés (például *.mysub.com) nem jelent biztonsági kockázatot, ha az egész szülőtartomány az ön ellenőrzése alatt áll (ellentétben a sebezhető *.com-gyel). További információ: rfc7230 section-5.4 .

Az ügyfelektől érkező kérések figyeléséhez adja hozzá az URI-előtagokat a gyűjteményhez, és hívja meg a metódust Start . HttpListener szinkron és aszinkron modelleket is kínál az ügyfélkérések feldolgozásához. A kérések és a hozzájuk kapcsolódó válaszok a `HttpListenerContext` objektum segítségével érhetők el, amelyet a `GetContext` metódus vagy annak aszinkron megfelelői, a `BeginGetContext` és `EndGetContext` metódusok adnak vissza.

A szinkron modell akkor megfelelő, ha az alkalmazásnak blokkolnia kell az ügyfélkérésre való várakozás során, és ha egyszerre csak egy kérést szeretne feldolgozni. A szinkron modell használatával hívja meg a GetContext metódust, amely megvárja, amíg egy ügyfél kérést küld. A metódus egy HttpListenerContext objektumot ad vissza a feldolgozáshoz, amikor az eset bekövetkezik.

Az összetettebb aszinkron modellben az alkalmazás nem blokkolja a kérelmekre való várakozást, és minden kérés feldolgozása a saját végrehajtási szálán történik. BeginGetContext A metódus használatával megadhat egy alkalmazás által definiált metódust, amelyet minden bejövő kéréshez meg kell hívni. Ezen a metóduson belül hívja meg a metódust a EndGetContext kérés beszerzéséhez, feldolgozásához és megválaszolásához.

Mindkét modellben a bejövő kérések a HttpListenerContext.Request tulajdonság használatával érhetők el, és HttpListenerRequest objektumok jelölik őket. Hasonlóképpen, a válaszok a HttpListenerContext.Response tulajdonság használatával érhetők el, és a HttpListenerResponse objektumok képviselik őket. Ezek az objektumok bizonyos funkciókat osztanak meg az HttpWebRequestHttpWebResponse objektumokkal HttpListener , de az utóbbi objektumok nem használhatók együtt, mert ügyfélalkalmazást, nem kiszolgálót, viselkedést valósítanak meg.

Ügyfélhitelesítést igényelhet egy HttpListener. Megadhatja a hitelesítéshez használni kívánt sémát, vagy megadhat egy meghatalmazottat, aki meghatározza a használni kívánt sémát. Az ügyfél identitásával kapcsolatos információk beszerzéséhez valamilyen hitelesítésre van szükség. További információkért tekintse meg a User, AuthenticationSchemesés AuthenticationSchemeSelectorDelegate a tulajdonságokat.

Note

Ha https használatával hoz létre egy HttpListener-t, ki kell választania egy kiszolgálótanúsítványt ahhoz a figyelőhöz. Ellenkező esetben az erre HttpListener irányuló kérések a kapcsolat váratlan bezárásával meghiúsulnak.

Note

A kiszolgálótanúsítványokat és más figyelőbeállításokat a Network Shell (netsh.exe) használatával konfigurálhatja. További részletekért lásd: Network Shell (Netsh). A végrehajtható fájl a Windows Server 2008 és a Windows Vista rendszereken kezdte meg a szállítást.

Note

Ha több hitelesítési sémát ad meg a HttpListener számára, a figyelő a következő sorrendben fogja felszólítja az ügyfeleket: Negotiate, NTLM, Digest, majd Basic.

HTTP.sys

Az HttpListener osztály a rendszermag HTTP.sysmódú figyelőre épül, amely a Windows összes HTTP-forgalmát kezeli. HTTP.sys kapcsolatkezelést, sávszélesség-szabályozást és webkiszolgáló-naplózást biztosít. SSL-tanúsítványok hozzáadásához használja a HttpCfg.exe eszközt.

A .NET 11-től kezdődően a Windows HTTP.sys implementációja HttpListener támogatja a kernelszintű válaszpufferezés engedélyezését. Ha engedélyezve van, a rendszer puffereli HTTP.sys a válaszadatokat, mielőtt elküldené őket az ügyfélnek, ami javíthatja a nagy késésű kapcsolatok átviteli sebességét. Ez a metódus meghívásával engedélyezhető az AppContext.SetSwitch alábbiak szerint:

AppContext.SetSwitch("System.Net.HttpListener.EnableKernelResponseBuffering", true);

Konstruktorok

Name Description
HttpListener()

Inicializálja a HttpListener osztály új példányát.

Tulajdonságok

Name Description
AuthenticationSchemes

Lekéri vagy beállítja az ügyfelek hitelesítéséhez használt sémát.

AuthenticationSchemeSelectorDelegate

Lekéri vagy beállítja a meghívott meghatalmazottat az ügyfelek hitelesítéséhez használt protokoll meghatározásához.

DefaultServiceNames

Lekéri a regisztrált előtagok által meghatározott szolgáltatónevek (SPN-ek) alapértelmezett listáját.

ExtendedProtectionPolicy

Lekéri vagy beállítja a ExtendedProtectionPolicy munkamenetek kiterjesztett védelméhez használni kívánt elemet.

ExtendedProtectionSelectorDelegate

Lekéri vagy beállítja a meghívott meghatalmazottat, hogy meghatározza az ExtendedProtectionPolicy egyes kérelmekhez használni kívánt elemet.

IgnoreWriteExceptions

Lekéri vagy beállít egy Boolean értéket, amely meghatározza, hogy az alkalmazás megkapja-e azokat a kivételeket, amelyek akkor fordulnak elő, amikor egy HttpListener válasz küldése az ügyfélnek.

IsListening

Beolvas egy értéket, amely jelzi, hogy elindult-e HttpListener .

IsSupported

Olyan értéket kap, amely jelzi, hogy használható-e HttpListener az aktuális operációs rendszerrel.

Prefixes

Lekéri az objektum által HttpListener kezelt egységes erőforrás-azonosító (URI) előtagokat.

Realm

Lekéri vagy beállítja az objektumhoz HttpListener társított tartományt vagy erőforráspartíciót.

TimeoutManager

A példány időtúllépés-kezelője HttpListener .

UnsafeConnectionNtlmAuthentication

Lekéri vagy beállít egy Boolean értéket, amely azt szabályozza, hogy az NTLM használatakor szükség van-e további, azonos TCP-kapcsolatot használó kérelmekre a hitelesítéshez.

Metódusok

Name Description
Abort()

Azonnal leállítja az HttpListener objektumot, és elveti az összes jelenleg várólistára helyezett kérést.

BeginGetContext(AsyncCallback, Object)

Megkezdi a bejövő kérések aszinkron beolvasását.

Close()

Leállítja a HttpListener.

EndGetContext(IAsyncResult)

Befejez egy aszinkron műveletet egy bejövő ügyfélkérés lekéréséhez.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetContext()

Vár egy bejövő kérésre, és a beérkezéskor ad vissza.

GetContextAsync()

A bejövő kéréseket aszinkron műveletként várja meg.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
Start()

Lehetővé teszi a példány számára a bejövő kérések fogadását.

Stop()

Ez a példány leállítja az új bejövő kérések fogadását, és leállítja az összes folyamatban lévő kérés feldolgozását.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Explicit interfész-implementációk

Name Description
IDisposable.Dispose()

Felszabadítja az objektum által birtokolt HttpListener erőforrásokat.

A következőre érvényes:

Lásd még