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
}