Web services &引用;指定的网络名称不再可用";在Httplistener中

Web services &引用;指定的网络名称不再可用";在Httplistener中,web-services,network-programming,httplistener,Web Services,Network Programming,Httplistener,我构建了一个简单的web服务,它简单地使用HttpListener来接收和发送请求。有时,服务会因“指定的网络名称不再可用”而失败。它似乎是在我写入HttpListenerResponse的输出缓冲区时抛出的 以下是错误: ListenerCallback()错误:指定的网络名称在System.Net.HttpResponseStream.Write中不再可用(字节[]缓冲区,Int32偏移量,Int32大小) 这是法典中有罪的部分。responseString是发送回客户端的数据: buffe

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

以下是错误:

ListenerCallback()错误:指定的网络名称在System.Net.HttpResponseStream.Write中不再可用(字节[]缓冲区,Int32偏移量,Int32大小)

这是法典中有罪的部分。responseString是发送回客户端的数据:

buffer=System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64=buffer.Length;
输出=response.OutputStream;
输出.写入(缓冲区,0,缓冲区.长度);
它似乎并不总是一个巨大的缓冲区,有两个例子是3816字节和142619字节,这些错误大约间隔30秒抛出。我不会认为我的单客户端应用程序会使HTTPlistener过载;客户端偶尔会突发发送/接收数据,几个交换会一个接一个地发生

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


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

到目前为止,我在使用HttpListener时只遇到过一次特殊的异常。 它发生在我的应用程序在断点上停留了一段时间后恢复执行时


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

当指定了
ContentLength64
并且
KeepAlive
false时,我也会遇到这种情况。似乎客户端正在检查
内容长度
头(所有可能的说法都是设置正确的,因为我得到了一个与任何其他值有关的异常),然后说“Whelp I'm done KTHXBYE”,并在底层
HttpListenerResponse
流期望它之前稍微关闭连接。现在,我只是捕获异常并继续。这里有相同的问题,但其他线程建议忽略异常


可能这不是正确的做法。

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

当您尝试响应无效请求时,问题就会出现。看一看。我发现解决这个问题的唯一办法是:

listener = new HttpListener();
listener.IgnoreWriteExceptions = true;
实例化侦听器后,只需将IgnoreWriteExceptions设置为true,错误就消失了


更新:

为了更深入的解释,
Http
协议基于
TCP
协议,该协议与每个对等方向其写入数据的流一起工作
TCP
协议是对等的,每个对等方都可以关闭连接。当客户端向您的
HttpListener
发送请求时,将进行TCP握手,然后服务器将处理数据并通过写入连接流来响应客户端。如果您试图写入远程对等方已关闭的流,则会出现“指定的网络名称不再可用”的异常。

您有任何可以发布的代码吗?一些简单的说明错误的东西会很有帮助。添加了更多细节,奥斯汀。不,还没有解决方案,@CraftyFella。十年后对此有什么新想法?你知道
System.Net.HttpListenerException的内在原因是什么吗:指定的网络名称不再可用
?@VitalyZdanevich我从未将其归因于用户实际遇到的问题。作为运行HttpListener的Windows服务吞并它的应用程序在7年内没有发生任何事件,直到我在传统的ASP.NET web应用程序中重新容纳它,以便我可以将它移动到AzureI,我也得到了这个。似乎只在返回http 500时发生