什么时候自托pipeAddressAccessDeniedException:HTTP无法注册URL

我正在编写一个组件的bddtesting,该组件会启动phantomjs,并在我的网站上创build一个特定的路线并对其进行处理。 由于该组件基本上是关于自动执行幻像实例的,因此无法轻松地将HTTP请求删除。

所以我想把自我托pipe的终结点(stub)放在一边,把我之后的数据剔除出去。 因为这是一个unit testing,所以我认为它对于单独运行非常重要,所以我这样做:

async Task can_render_html_for_slide_async() { var config = new HttpSelfHostConfiguration("http://localhost:54331"); config.Routes.MapHttpRoute("Controller", "{controller}", new {}); using (var server = new HttpSelfHostServer(config)) { server.OpenAsync().Wait(); var client = new HttpClient(); var resp = await client.GetStringAsync(config.BaseAddress+"/Stub"); Console.WriteLine(resp); } } public class StubController : ApiController { public string Get() { return "Booyah"; } } 

哪个让我

 AddressAccessDeniedException : HTTP could not register URL http://+:54331/ 

我明白netsh或pipe理模式是必需的,但我不明白为什么。 Nodejs例如在Windows上运行得很好,但没有这样的要求。

另外使用OWIN直接不需要networking连接。 发生什么了?

我在codeproject上写了一篇关于它的文章,这是为了使多个应用程序可以共享相同的端口。 你可以同时拥有IIS和Apache(或者你的OWIN)监听端口80.由于url的路径,路由到了正确的应用程序。 IIS和Apache都会使用这个驱动程序(http.sys)。 但是你需要许可来“保留”一条路径。 管理员总是被授权的。 对于其他用户,使用netsh或我的GUI工具HttpSysManager来设置ACL。

任何需要通过netsh提供许可的方法都使用Windows内核驱动程序来提供http访问。

如果库本身打开一个套接字并以这种方式处理http通信,则不需要使用netsh。

所以要回答你的问题,有些方法正在使用内核驱动程序,有些则是自己处理协议。