可以使用异常HttpListener吗?

时间:2015-07-16 20:40:43

标签: c# exception httplistener

最近几天,我一直在使用HttpListener在C#中构建一个Web服务器应用程序。我在途中学到了很多东西,现在还是。目前我已经完成了所有工作,根据某些情况设置标题。

在大多数情况下,工作正常,但有时会抛出异常错误。这种情况有几次发生。大多数(如果不是全部)在发送所有数据之前关闭连接。然后发生错误。但据我所知,其中一些确实是由浏览器引起的。

就像让我们采取Chrome一样。每当我直接转到MP3文件时,它会发送2个GET请求。其中一个是导致错误,另一个是工作并接收部分内容。在此之后,我可以听MP3并且没有问题。流媒体工作。 但回到给我错误的请求,我可以在我的代码中使用的标题中没有任何内容可以输出数据,就像我已经使用HEAD请求一样。所以我在这里很困惑。

IE也存在直接打开MP3文件和通过HTML5音频标签流式传输的问题。它也会不时变化。有时我打开页面,只发出2个请求。 HTML页面和MP3。没有错误。有时候,有3个请求。它连接到MP3两次。现在,有时其中一个连接在我打开页面后直接中止,有时2个请求到MP3文件,甚至不接受数据。在两个请求标头中,他们都希望文件结束。所以字节:123-123 / 124。 我还在w3school的音频元素上测试了它。 IE也会在那里进行两次连接,一次中止,另一次加载MP3文件。

所以我的问题是,是否有可能使Web服务器异常/防错,或者更好的问题,抛出这些异常是不是很糟糕?或者您是否知道如何解决这些错误?

我得到的错误是:I / O操作已被线程退出或应用程序请求中止。

我写给客户的方式是:

            using (Stream Output = _CResponse.OutputStream)
            {
                Output.Write(_FileOutput, rangeBegin, rangeLength);
            }

我不确定是否有另一种(更好)的方式。这是我在研究时遇到的许多主题,教程和页面。

关于标题:默认标题:内容长度,内容类型,状态代码。在某些情况下,比如MP3文件和视频,我添加了一个Accept-Ranges:Bytes标题。如果请求标头中包含Range,我会添加Content-Range标头和PartialContent状态代码。

1 个答案:

答案 0 :(得分:3)

从服务器的角度来看,任何客户端都可以随时断开连接。这是服务器正常运行的一部分。检测此特定情况,记录并吞下异常(因为它已被处理)。它不是服务器错误。