Как установить TimeoutManager на HttpListener - PullRequest
0 голосов
/ 24 января 2019

Начиная с .NET Framework 4.5, был представлен класс HttpListenertimeoutManager , который действует как менеджер для HttpListeners:

Диспетчер тайм-аута для использования с объектом HttpListener.

Что позволяет вам установить различные таймауты для HttpListener, используя TimeSpan, например, так:

private HttpListenerTimeoutManager manager;

manager.IdleConnection = TimeSpan.FromMinutes(2);
manager.HeaderWait = timespan.FromMinutes(2);
manager.DrainEntityBody= timespan.FromMinutes(2);

это похоже на то, что нужно сохранять определенную предустановку без необходимости устанавливать все таймауты индивидуально для любого слушателя, который может быть запущен.

Теперь я хочу установить TimeoutManager на моем HttpListener listener на только что созданный manager. Однако, кажется, нет способа сделать это.

listener.TimeoutManager = manager; нельзя сделать, поскольку свойство listener.TimeoutManager равно только для чтения (как указано в документах ).

Но нет альтернативного listener.TimeoutManager.Set() метода для его установки или любого другого метода установки.

Создание нового HttpListener с менеджером в его конструкторе listener = new HttpListener(manager) также не работает, так как HttpListener не имеет конструктора, который принимает 1 аргумент.

То есть единственный способ, которым я могу редактировать HeaderWait с помощью диспетчера на моем слушателе, - это сделать следующее:

listener.TimeoutManager.HeaderWait = manager.HeaderWait;

что на самом деле сводится к

listener.TimeoutManager.Headerwait = Timespan.FromMinutes(2);

Что тогда кажется лучшим вариантом, так как избавляет меня от создания дополнительной переменной, и все же вынуждает меня устанавливать каждый таймаут индивидуально.

Не понимаю ли я сценарий использования HttpListenerTimeoutManager или наблюдаю за его настройкой?

Использование Unity с .NET 4.x (которая обеспечивает поддержку до библиотек классов .NET 4.7) версия среды выполнения сценариев.

1 Ответ

0 голосов
/ 25 января 2019

Преобразование Пола и Кевина Госсе их комментариев в ответ для дальнейшего использования:

Как отметил Кевин Госс, я действительно ошибался, полагая, что HttpListenerTimeoutManager может использоваться для управления тайм-аутами на нескольких HttpListener с. Вместо этого он просто там

сгруппируйте все типы таймаутов в одном месте, чтобы упростить использование HttpListener

Что имеет смысл, глядя на реализацию класса HttpListenerTimeoutManager.

Правильный способ использования HttpListenerTimeoutManager - установить для него свойство HttpListener.TimeoutManager, например, так:

HttpListener listener;
HttpListenerTimeoutManager manager;

public Foo()
{
    manager = listener.TimeoutManager;
    manager.IdleConnection = TimeSpan.FromMinutes(5);
    manager.HeaderWait = TimeSpan.FromMinutes(5);
}
...