C # HttpListener Class не работает с Windows 10 версии 1803 - PullRequest
0 голосов
/ 16 октября 2018

Я устанавливаю программное обеспечение на компьютер с Windows 10 с новой установкой обновления 1803, которая использует класс C # HttpListener в качестве веб-сервера.Это программное обеспечение работает на каждой версии Windows, начиная с XP.Однако на 1803 я не могу подключиться к веб-серверу внезапно.Если я запускаю программу от имени администратора (чего раньше никогда не делал), я могу подключиться только на 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, поэтому я предполагаю, что есть некоторые изменения в сетевом стеке или что-то в этом роде.Код не генерирует никаких исключений.Любые подсказки приветствуются.

1 Ответ

0 голосов
/ 16 октября 2018

Вы должны включить прослушивание на определенных портах, используя команду netsh.

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

См. this для получения дополнительной информации

...