«Указанное имя сети больше не доступно» в Httplistener - PullRequest
9 голосов
/ 09 января 2009

Я создал простой веб-сервис, который просто использует HttpListener для получения и отправки запросов. Иногда происходит сбой службы с указанным именем сети больше не доступно. Кажется, он выбрасывается при записи в выходной буфер HttpListenerResponse.

Вот ошибка:

ListenerCallback () Ошибка: указанное сетевое имя больше не доступно в System.Net.HttpResponseStream.Write (буфер Byte [], смещение Int32, размер Int32)

и вот виновная часть кода. responseString - данные, отправляемые обратно клиенту:

            buffer = System.Text.Encoding.UTF8.GetBytes(responseString);

            response.ContentLength64 = buffer.Length;
            output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);

Кажется, это не всегда большой буфер, два примера составляют 3 816 байт, и 142 619 байт эти ошибки были выброшены с интервалом около 30 секунд. Я бы не подумал, что мое единственное клиентское приложение будет перегружать HTTPlistener; клиент время от времени отправляет / получает данные, причем несколько обменов происходят один за другим.

Чаще всего поиски в Google показывают, что это распространенная ИТ-проблема, при которой, когда возникают проблемы с сетью, эта ошибка отображается - большая часть справки направлена ​​на системных администраторов, которые диагностируют проблему с приложением, в большей степени, чем разработчики, отслеживающие ошибку. Мое приложение было протестировано на разных машинах, в сетях и т. Д., И я не думаю, что это просто проблема с настройкой сети.

В чем может быть причина этой проблемы?

Ответы [ 3 ]

3 голосов
/ 04 сентября 2009

Я тоже это получаю, когда указано ContentLength64 и KeepAlive равно false. Кажется, что клиент проверяет заголовок Content-Length (который, по всем возможным учетным записям, установлен правильно, так как я получаю исключение с любым другим значением), а затем говорит: чуть раньше ожидаемого потока HttpListenerResponse. Сейчас я просто ловлю исключение и продолжаю.

0 голосов
/ 18 ноября 2011

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

C # проблема с HttpListener

Может быть, это не правильно.

0 голосов
/ 05 июня 2009

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

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

...