Dot-Net
.NET HttpListener:同時註冊 HTTP 和 HTTPS 時,我得到“與機器上的現有註冊衝突”
我正在嘗試在 C# 項目中使用 .NET HttpListener。當我註冊我的前綴“http://*:8080/”時,它似乎不適用於 HTTPS 網址(即無法獲取它們)。當我嘗試使用以下程式碼註冊前綴的 HTTP 和 HTTPS 版本時,我收到錯誤消息:
“無法收聽前綴 ‘https:// :8080/’,因為它與機器上的現有註冊衝突。”*
如何讓我的前綴同時適用於 HTTP 和 HTTPS?
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編輯 1 - 附加說明:
- 該程序用作發出 HTTP(S) 呼叫的 PC 應用程序的本地代理。
- 因此,使用基於更改瀏覽器代理設置以指向本地本地代理伺服器(例如 localhost:8080)
- 因此,這意味著(我假設)HttpListener 必須在同一個本地埠(例如 8080)上偵聽 HTTP 和 HTTPS 流量。
- 目標:嘗試為我的程序找到一種在同一埠上同時偵聽 HTTP 和 HTTPS 的方法。
謝謝
目標:嘗試找到一種方法讓我的程序在同一個埠上同時監聽 HTTP 和 HTTPS。
你不能用 HTTPListener 做到這一點。您需要使用TCPListener並根據它是 HTTP 還是 HTTPS 有條件地處理每個響應。
我很確定如果您使用一個 HTTPListener 用於 HTTP 8080 和一個用於 HTTPS 8443,您應該能夠讓您的瀏覽器使用 yourproxy:8080 用於 HTTP 和 yourproxy:8443 用於 HTTPS。Firefox 絕對讓你做到這一點。
預設情況下,https 使用埠 443 而不是 80。您必須為不同的協議列表指定不同的埠。