2010-04-12 10 views
6

Ich versuche .NET HttpListener in einem C# -Projekt zu verwenden. Wenn ich mein Präfix "http: // *: 8080 /" registriere, scheint es nicht für HTTPS-URLs zu funktionieren (d. H., Nimmt es nicht auf). Wenn ich den folgenden Code versuchen sowohl die HTTP registrieren und HTTPS-Versionen des Präfix jedoch erhalte ich die Fehlermeldung:.NET HttpListener: Beim Registrieren von HTTP und HTTPS bekomme ich "Konflikte mit einer bestehenden Registrierung auf dem Rechner"

„Failed to auf Präfix hören‚https: //: 8080 /‘, weil es mit einem Konflikt bestehende Registrierung am Gerät. "*

Wie kann ich meine Präfix für beide HTTP & HTTPS funktioniert?

private HttpListener _listener; 

    // Create prefixes 
    var prefixes = new List<string>(); 
    prefixes.Add("http://*:8080/"); 
    prefixes.Add("https://*:8080/"); 


    // Create HttpListener 
    _listener = new HttpListener(); 
    foreach (string prefix in prefixes) 
    { 
     _listener.Prefixes.Add(prefix); 
    } 

    _listener.Start(); // <== ERROR HERE 

EDIT 1 - Zusätzliche Klarstellung:

  • Das Programm wird als lokaler Proxy für PC-Anwendungen arbeiten HTTP machen (S) ruft.
  • Nutzungs basiert daher auf eine Browser-Proxy-Einstellungen ändern zu diesem lokal home grown-Proxy-Server verweisen (zB localhost: 8080)
  • Dies bedeutet also (ich nehme an), dass die Httplistener für HTTP- und HTTPS-Datenverkehr zu überwachen haben auf demselben lokalen Port (z. B. 8080).
  • ZIEL: Versuchen Sie, einen Weg für mein Programm zu finden, HTTP und HTTPS auf dem gleichen Port zu hören.

dank

+0

Ich habe gerade eine Prämie für jemanden gestartet, der mir einen Beispielcode geben kann, der kompiliert und funktioniert, der es ermöglicht, sowohl HTTP als auch HTTPS am selben Port zu hören. – Greg

Antwort

8

OBJECTIVE: Try to find a way for my program to listen to both HTTP and HTTPS on the same port.

Sie kann dies mit Httplistener nicht tun. Sie müssen verwenden und jede Antwort abhängig davon behandeln, ob es sich um HTTP oder HTTPS handelt.

Ich bin mir ziemlich sicher, wenn Sie einen HTTPListener für HTTP 8080 und einen für HTTPS 8443 verwenden, sollten Sie in der Lage sein, Ihren Browser mit Ihrem Proxy: 8080 für HTTP und IhremProxy: 8443 für HTTPS. Firefox lässt dich das auf jeden Fall machen.

3

standardmäßig HTTPS den Port 443 statt 80. Sie haben mit anderen Port anderes Protokoll lister angeben.

+0

Aber wenn ich meinen Browser so konfiguriere, dass er diesen lokalen "Proxy" durchläuft, nehme ich an, dass ich nur einen Host/Port angeben muss. Wie normalerweise bei Browsern gibt es nur einen bestimmten Port für einen Proxy-Server? – Greg

2

Das klingt nicht trivial, aber nicht unmöglich. Sie müssen überprüfen, was der Client sendet, und entscheiden, ob er eine HTTP- oder HTTPS-Sitzung basierend auf den von ihm bereitgestellten Daten startet.

edit: Wenn Sie darüber nachdenken, ist das wahrscheinlich nicht das, was Sie tun möchten, wenn Sie einen Proxy schreiben. Stattdessen müssen Sie mit der CONNECT-Methode umgehen (siehe http://www.ietf.org/rfc/rfc2817.txt) und eine getunnelte Verbindung zum Zielserver aufbauen.

0

Sie sind nicht gezwungen, die gleiche Konfiguration für alle Protokolle zu verwenden.

Drücken Sie in den Proxy-Einstellungen auf Erweitert, und Sie können dort verschiedene Proxy-Einstellungen für andere Protokolle angeben.

+0

verstanden - aber Sie müssen dies nicht tun, um einen normalen Firmen-Proxy-Server zu durchlaufen, also möchte ich, dass mein Einheimischer in der Lage ist, in der gleichen Hinsicht zu arbeiten. – Greg

2

"Wenn Sie einen HttpListener mit https erstellen, müssen Sie ein Serverzertifikat für diesen Listener auswählen. Anderenfalls schlägt eine HttpWebRequest-Abfrage dieses HttpListener mit einem unerwarteten Abschluss der Verbindung fehl." Dies ist von msdn Website.(http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx) Vielleicht gibt es ein Problem?

Verwandte Themen