C# HttpListener Class 无法使用 Windows 10 版本 1803
C# HttpListener Class not Working with Windows 10 version 1803
我正在 Windows 10 机器上安装软件,并全新安装更新 1803,它使用 C# HttpListener
class 作为网络服务器。该软件适用于自 XP 以来的每个 Windows 版本。但是在1803上,我突然无法连接到网络服务器。如果我以管理员身份 运行 软件(我以前从未这样做过),我只能在 localhost
上连接,但不能从网络上的另一台机器连接。
我已经阅读了所有关于使用版本 1803 联网以及共享和打开 SMB 版本 1 的文章,但是其中的 none 已经解决了问题。我现在很困惑。
这是服务器代码:
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 的先前版本上运行良好,因此我假设网络堆栈或其他方面有一些变化。代码没有生成异常。任何线索表示赞赏。
您必须使用 netsh 命令启用对特定端口的侦听。
netsh add urlacl url=http://+:80/ user=DOMAIN\user listen=yes
有关详细信息,请参阅 this
我正在 Windows 10 机器上安装软件,并全新安装更新 1803,它使用 C# HttpListener
class 作为网络服务器。该软件适用于自 XP 以来的每个 Windows 版本。但是在1803上,我突然无法连接到网络服务器。如果我以管理员身份 运行 软件(我以前从未这样做过),我只能在 localhost
上连接,但不能从网络上的另一台机器连接。
我已经阅读了所有关于使用版本 1803 联网以及共享和打开 SMB 版本 1 的文章,但是其中的 none 已经解决了问题。我现在很困惑。
这是服务器代码:
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 的先前版本上运行良好,因此我假设网络堆栈或其他方面有一些变化。代码没有生成异常。任何线索表示赞赏。
您必须使用 netsh 命令启用对特定端口的侦听。
netsh add urlacl url=http://+:80/ user=DOMAIN\user listen=yes
有关详细信息,请参阅 this