1

HttpListener 有一些我真的不明白的地方。

下面的代码不言自明,并以一种方式暴露了“问题”。

我只是用相同的单个前缀实例化两个不同的 HttpListener。然后我启动第一个侦听器,当然当我尝试启动第二个侦听器(相同的前缀)时我得到一个 HttpListenerException .. 到目前为止一切都很好。

好的,我的错(或者如果我们正在使用配置工具,则是最终用户的错)。不用惊慌,我将清除第二个侦听器的前缀并指定一个新的...或停止第一个侦听器并尝试重新启动第二个侦听器,或者其他...

但不能做到这一切,因为一旦我尝试访问第二个侦听器前缀或其他任何内容,我就会得到一个 ObjectDisposedException(无法访问已处置的对象。对象名称:'System.Net.HttpListener')。

我的问题是为什么?我在 HttpListener 文档中看不到任何内容,说明在 HttpListenerException 上,一些 HttpListener 对象的内部内容以某种方式被处置,并且该对象从那时起就没有用了......

所以这意味着如果我启动一个 HttpListener 并得到一个 HttpListenerException ,无论如何我都必须重新创建一个全新的 HttpListener 对象?对我来说似乎有点奇怪(但可能有另一种方式或一个很好的理由)。

提前感谢您的回答!

var listener1 = new HttpListener();
listener1.Prefixes.Add("http://localhost:8080/MyHandler/");
listener1.Start();

var listener2 = new HttpListener();
listener2.Prefixes.Add("http://localhost:8080/MyHandler/");

try
{
   listener2.Start();
}
catch (HttpListenerException ex)
{
  listener2.Prefixes.Clear(); // BAM ! ObjectDisposedException
}
4

1 回答 1

2

异常意味着出现了可怕的错误。它不会允许毫无戒心的消费者继续使用可能损坏且不稳定的对象,而是自行处置。只需创建新的侦听器,并且很高兴您不必担心使用可能无用的对象。

于 2012-06-22T22:29:50.070 回答