.NET HttpListener:注册HTTP和& HTTPS我得到“与机器上现有注册冲突”

时间:2010-04-12 00:15:16

标签: .net httplistener

我正在尝试在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 - 补充说明:

  • 该程序作为PC应用程序的本地代理,用于调用HTTP(S)。
  • 因此,用法是基于将一个浏览器代理设置更改为指向本地本地代理服务器(例如localhost:8080)
  • 这意味着(我假设)HttpListener必须在同一本地端口(例如8080)上侦听HTTP和HTTPS流量。
  • 目标:尝试为我的程序找到一种在同一端口上侦听HTTP和HTTPS的方法

感谢

5 个答案:

答案 0 :(得分:8)

  

目标:尝试为我找到一种方法   程序来监听HTTP和   同一端口上的HTTPS。

无法使用HTTPListener执行此操作。您需要使用TCPListener并有条件地处理每个响应,具体取决于它是HTTP还是HTTPS。

我很确定如果你使用一个HTTPListener用于HTTP 8080,一个用于HTTPS 8443,你应该能够让你的浏览器使用你的app:8080用于HTTP和yourproxy:8443用于HTTPS。 Firefox绝对允许你这样做。

答案 1 :(得分:3)

默认情况下,https使用端口443而不是80.您必须为不同的协议列表器指定不同的端口。

答案 2 :(得分:2)

这听起来非常重要但并非不可能。您需要检查客户端发送的内容,并根据它们提供的数据确定它们是否正在启动HTTP或HTTPS会话。

编辑:考虑到你正在编写代理,这可能不是你想要做的事情。相反,您需要处理CONNECT方法(请参阅http://www.ietf.org/rfc/rfc2817.txt)并打开与目标服务器的隧道连接。

答案 3 :(得分:2)

“如果使用https创建HttpListener,则必须为该侦听器选择服务器证书。否则,此HttpListener的HttpWebRequest查询将因意外关闭连接而失败。” 这是来自msdn网站。 (http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx) 也许有问题吗?

答案 4 :(得分:0)

您不必为所有协议使用相同的配置。

在代理设置中点击高级,然后您可以为其他协议指定不同的代理设置。