HttpListener Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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. |