想象一下,提升用户(例如安装程序)配置URL保留:
netsh http add urlacl url="https://+:8105/" user="SVCACCOUNT" listen=yes
现在当Owin启动(在SVCACCOUNT下运行)时,会出现以下错误:
System.Net.HttpListenerException: Failed to listen on prefix 'http://+:8105/' because it conflicts with an existing registration on the machine.
at System.Net.HttpListener.AddAllPrefixes()
at System.Net.HttpListener.Start()
at Microsoft.Owin.Host.HttpListener.OwinHttpListener.Start(..)
at Microsoft.Owin.Host.HttpListener.OwinServerFactory.Create(..)
...
at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context)
而Owin'条目'点:
WebApp.Start("http://+:8105", ..)
在创建问题期间,我发现注册了http://*:8105
和同一个"的Owin / HttpListener URL工作了#34;。
什么阻止HttpListener(以及Owin)从使用以前使用强通配符进行的注册?
为什么在注册和绑定中使用*
("弱通配符")可以让听众启动?(使用&#34 ;强大的通配符"正在抛出上述错误;完全删除注册将导致侦听器失败,并且#34;由于访问权限有限,访问被拒绝"
这在哪里记录,以及'后果'从强到弱的通配符切换到了吗?为什么这个修复甚至工作?从很多次提出相关问题(通常没有一个好的答案),似乎+
"可能工作"在过去和/或在不同的系统或配置上:改变了什么?
(我已经在http.sys配置上找到了分散的文档,例如Host-Specifier Categories,但仍然没有明确解释冲突注册的问题。)
如果按System.Net.HttpListenerException: Failed to listen on prefix 'http://localhost:8080删除注册,则Owin服务将成功启动。但是我认为这需要更高的高度来收听端口。
不是" Owin self-host - Failed to listen on prefix 'http://localhost:12345/' because it conflicts with an existing registration on the machine"的副本。因为只有当 定义了URL保留时才会出现这个问题:同样,没有其他进程可以监听,如通过netstat确认的那样。
像Self hosted OWIN and urlacl这样的问题让我相信这是一个许可问题或一些微不足道的事情......例如,http://+:port
与http://*:port
的区别如何? (不,使用' EVERYONE'为urlacl无法解决问题。)
评论" Running self-hosted OWIN Web API under non-admin account"可能是相关的 - 与+
vs *
相关,而且一般都缺乏澄清。
答案 0 :(得分:0)
- What prevents HttpListener (and thus Owin) from using the registrations previously taken with a Strong Wildcard?
也许问题在于您正在注册 HTTPS
协议:
netsh http add urlacl url="https://+:8105/" user="SVCACCOUNT" listen=yes
然后您在代码中使用了 HTTP
协议:
WebApp.Start("http://+:8105", ..)
-Why does using * (a "weak wildcard") in both registration and binding allow a listener to start?
*
和 +
通配符之间的区别在于 *
包含无效元素,而 +
强制存在至少 1 个字符。我不知道执行上的差异,但可能是几乎察觉不到的微小差异。