【问题标题】:C# HttpListener Class not Working with Windows 10 version 1803C# HttpListener 类不适用于 Windows 10 版本 1803
【发布时间】:2018-10-16 06:14:11
【问题描述】:

我正在 Windows 10 机器上安装软件,并全新安装更新 1803,它使用 C# HttpListener 类作为 Web 服务器。该软件适用于自 XP 以来的所有 Windows 版本。但是在 1803 上,我突然无法连接到 Web 服务器。如果我以管理员身份运行该软件(我以前从未这样做过),我只能在 localhost 上连接,但不能从网络上的另一台机器上连接。

我已经阅读了所有关于使用 1803 版联网以及共享和打开 SMB 版本 1 的文章,但没有一篇文章能够解决问题。我现在很困惑。

这是服务器代码:

internal WebServer(RuntimeDB database)
{
    _db = database;
    ThreadPool.SetMaxThreads(50, 1000);
    ThreadPool.SetMinThreads(5, 50);
    _listener = new HttpListener {IgnoreWriteExceptions = true};
    _listener.Prefixes.Add("https://+:443/secure/");
    _listener.Prefixes.Add("http://+:80/trigger/");
}

internal void Start()
{
    try {
        _listener.Start();
        while (_listener.IsListening) {
            try {
                var request = _listener.GetContext();
                ThreadPool.QueueUserWorkItem(ProcessRequest, request);
            } catch (HttpListenerException) {
                break;
            } catch (InvalidOperationException) {
                break;
            }
        }
    } catch (Exception e) {
        LogMsg($"Fatal Error on thread WebServer: {e.Message}. Source: {e.Source} Target Site: {e.TargetSite}  Stack Trace: {e.StackTrace}");
    } finally {
        _listener?.Stop();
        _listener?.Close();
    }
}

这在以前版本的 Windows 10 上运行良好,所以我假设网络堆栈或其他方面有一些变化。代码没有生成异常。任何线索表示赞赏。

【问题讨论】:

  • 本题与c#无关。检查您的防火墙设置或其他东西。我也投票结束这个问题作为题外话。
  • 在关闭防火墙的情况下做同样的事情,所以似乎不是防火墙问题。

标签: c# smb httplistener


【解决方案1】:

您必须使用 netsh-command 启用对特定端口的侦听。

netsh add urlacl url=http://+:80/ user=DOMAIN\user listen=yes

更多信息请见this

【讨论】:

  • 对不起,我忘了说我已经打开了防火墙端口,并且还尝试过完全关闭防火墙。即使使用localhost/secure,我也无法访问网络服务器,除非我以管理员身份运行网络服务器。
  • @SteveMyers 你试过我提到的命令了吗,如果没有,你应该这样做。
  • 好的,你是对的。我需要使用这个命令,我发现它必须与我为 HttpListener 指定的 URL 完全匹配。否则,我会收到拒绝访问错误。谢谢!
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多