Wenn Sie einen HTTPListener verwenden, müssen Sie httpconfig.exe oder netsh verwenden, um Ihren HTTPListener zu konfigurieren, denn:
A. AFAIK gibt es keine API, um dies von C# aus zu tun, nur die Befehlszeilentools
B. Standardmäßig können nur SYSTEM oder die lokale Administratorengruppe auf http-Präfixe hören
Also... wenn Ihre Anwendung unter dem Benutzerkonto läuft, müssen Sie explizit Zugriff gewähren (mit httpcfg.exe oder netsh), weil Ihr HTTPHandler die HTTP.sys verwendet, um Ports mit dem laufenden Webserver zu teilen (so können Sie Ihre eigene Webanwendung auf Port 80 hosten, während IIS auch auf Port 80 läuft).
Eine bessere Lösung wäre es, einen eingebetteten Webserver zu verwenden, der auf dem benötigten Port lauscht. Dies wird nicht funktionieren, wenn eine andere Anwendung (z. B. IIS) den Port bereits verwendet, aber da dieser HTTP.sys nicht für die Portfreigabe verwendet, gibt es keine Sicherheitseinschränkungen bezüglich des Benutzerkontos, das den Port öffnet/abhört. Da Sie möchten, dass der Benutzer seinen eigenen Port angibt, scheint es akzeptabel, auf einem anderen Port als Port 80 zu laufen.
Mein Unternehmen stellt ein kommerzielles Produkt namens Neokernel Web Server ( http://www.neokernel.com ), die ASP.NET ausführt und mit der Sie den Server programmatisch starten/stoppen und Konfigurationen festlegen können; Sie können diese Assembly in die Anwendung einbetten und verteilen.
Es gibt auch den Cassini-Quellcode, den Sie verändern und einbetten können. Er ist kostenlos, hat aber einige Nachteile wie keine Protokollierung oder SSL-Unterstützung.