Httplistener中的“指定的网络名称不再可用”

时间:2009-01-09 19:48:22

标签: web-services network-programming httplistener

我构建了一个简单的Web服务,只使用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搜索都显示这是一个常见的IT问题,当出现网络问题时,会显示此错误 - 大部分帮助都是针对系统管理员诊断应用程序问题,而不是开发人员追踪错误。我的应用程序已经在不同的机器,网络等上进行了测试,我认为这不仅仅是网络配置问题。

这个问题的原因可能是什么?

5 个答案:

答案 0 :(得分:3)

如果指定ContentLength64KeepAlivefalse,我也会收到此消息。似乎客户端正在检查Content-Length标题(通过所有可能的帐户,正确设置,因为我得到任何其他值的异常)然后说“Whelp我已完成KTHXBYE”并关闭在基础HttpListenerResponse流期望它之前的连接。现在,我只是抓住异常并继续前进。

答案 1 :(得分:0)

到目前为止,我只使用HttpListener获得了这个特殊的异常。 当我的应用程序在断点上站了一段时间后我恢复执行时发生了。

也许涉及某种内部超时?您的应用程序以突发方式发送数据,这意味着它可能在很多时候完全处于非活动状态。异常是在一段时间不活动后立即发生的吗?

答案 2 :(得分:0)

这里的问题相同,但其他线程建议忽略异常。

C# problem with HttpListener

可能这不是正确的事情。

答案 3 :(得分:0)

对我来说,我发现只要客户端在完全加载网页之前关闭该网页,就会出现该异常。我要做的只是添加一个try catch块,并在异常发生时打印一些内容。换句话说,我只是忽略了例外。

答案 4 :(得分:0)

当您尝试响应无效请求时,会出现问题。看一下this。我发现解决此问题的唯一方法是:

listener = new HttpListener();
listener.IgnoreWriteExceptions = true;

实例化监听器后,只需将 IgnoreWriteExceptions 设置为true,错误就会消失。