Dot-Net

.NET HttpListener:同時註冊 HTTP 和 HTTPS 時,我得到“與機器上的現有註冊衝突”

  • August 18, 2011

我正在嘗試在 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。您必須為不同的協議列表指定不同的埠。

引用自:https://stackoverflow.com/questions/2619251