2009-01-09 199 views
8

我已经构建了一个简单的Web服务,它只是简单地使用HttpListener来接收和发送请求。有时,服务会因“指定的网络名称不再可用”而失败。当我写入HttpListenerResponse的输出缓冲区时,它似乎被抛出。Httplistener中的“指定的网络名称不再可用”

以下是错误:

ListenerCallback() Error: The specified network name is no longer available at System.Net.HttpResponseStream.Write(Byte[] buffer, Int32 offset, Int32 size)

这里是代码的有罪部分。 responseString是数据被发送回客户端:

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

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

它似乎并不永远是一个巨大的缓冲区,两个例子是3,816字节,字节142619,这些错误被抛出相隔约30秒。我不认为我的单个客户端应用程序会超载HTTPlistener;客户端偶尔会以突发方式发送/接收数据,并且多个交换机依次发生。

大多数谷歌搜索显示,这是一个常见的IT问题,当存在网络问题时,会显示此错误 - 大多数帮助针对的是系统管理员诊断应用程序问题,而不是开发人员追踪错误。我的应用已经在不同的机器,网络等上进行过测试,我不认为这只是一个网络配置问题。

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

+0

你有任何可以发布的代码吗?减少显示错误的东西会非常有帮助。 – 2009-01-09 21:18:41

回答

0

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

也许有涉及某种内部超时?你的应用程序以突发方式发送数据,这意味着它可能在很长一段时间内完全不活动。在一段不活动之后立即发生异常?

2

我也收到了这个,当ContentLength64指定和KeepAlivefalse。看起来好像客户端正在检查标头(由所有可能的帐户设置正确,因为我得到一个带有任何其他值的异常),然后说“我完成了KTHXBYE”,然后关闭连接位于基础HttpListenerResponse流之前的位置。现在,我只是捕捉异常并继续前进。

相关问题