HttpListener的替代品?

时间:2008-11-11 11:49:23

标签: .net cassini httplistener

我正在开发一个到目前为止使用HttpListener提供一个小型独立http服务器的应用程序。但是,我最近发现HttpListener需要以管理员身份运行,但这并不总是可行的。

最好的选择是什么?我需要http GET和POST,它们不仅仅是在文件系统上读/写文件,而是需要运行自定义.Net代码。

到目前为止,我的研究已经提到了卡西尼,但据我所知,我将不得不写一个自定义版本。还有别的事吗?在具有与HttpListener相同的接口的东西,但不需要管理员权限将是惊人的!

7 个答案:

答案 0 :(得分:8)

我发现的一个替代方案是CodePlex上的C# Webserver

“...一个灵活的http服务器,可嵌入任何.Net应用程序。它采用模块化设计,使用模块添加功能。服务器还支持REST和所有http动词...”< / I>

它有一个HttpListener类,我想它类似于System.Net.HttpListener,但我还没有使用其中任何一个,所以我无法确定。

答案 1 :(得分:3)

this other question涵盖了一个解决方案 - 您可以授予自己以非管理员身份运行HttpListener的权限。

您可以从命令文件中启动应用程序,该文件会对权限进行排序,然后运行真实的应用程序。

答案 2 :(得分:3)

就像Will Dean在你的帖子上发表的评论所说,你可以运行以下netsh命令:

netsh http add urlacl url=http://+:8346/ user="NTAuthority\Authenticated Users" sddl="D:(A;;GX;;;AU)"

用您的值替换'http:// +:8346 /',这将允许任何经过身份验证的用户在目标端点上运行Web服务器。

答案 3 :(得分:3)

关于声明:

  

我最近发现HttpListener需要以管理员身份运行

这不完全正确,其他一些答案触及其中一个原因,但还有另一个:

  1. 其他海报注意:您可以向非管理员授予权限。很好,但不是很好。
  2. 您可以在本地主机上侦听,即使是在端口80上,也不需要管理员。注意:我记得只有“localhost”有效,而不是“127.0.0.1”...所以请确保将localhost传递给你的Prefixes.Add调用。
  3. 我们正在发布一个内部工具,允许开发人员在他们的PC上运行基于HTTP的应用程序主机,我们起初认为使用HttpListener是不可能的,因为Admin(或Admin授予的权限)问题,但是我们发现localhost工作得很好而不是管理员。这有点道理:外部监听是“危险的”,但在本地机器上监听并不是那么危险。

答案 4 :(得分:0)

好的,所以你有一个需要允许入站http连接的常规桌面应用程序 - 嗯 - Windows防火墙不会成为问题吗?

假设没有,它听起来几乎像一个网络服务 - 你可以走那条路 - 通过它公开网址吗?虽然我的.Net知识不够深入,无法知道您是否仍需要运行特定的http服务器来回答请求。 Spring.Net可能值得一看。

答案 5 :(得分:0)

Nowin是一个很棒的库,可以Owin作为ServerFactory集成到HttpListener,而不依赖于Microsoft.Owin.Host.HttpListener。能够毫不费力地放入替换{{1}} lib

答案 6 :(得分:0)

对于.NET Core应用程序,存在一个新的(跨平台的)HTTP服务器实现:Kestrel