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

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

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

有帮助吗?

解决方案

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

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

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

其他提示

这个其他问题 - 您可以授予自己以非管理员身份运行HttpListener的权限。

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

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

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

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

关于声明:

  

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

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

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

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

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

Nowin 是一个很棒的库,可以集成在 Owin as ServerFactory ,不依赖于 HttpListener 。能够毫不费力地替换 Microsoft.Owin.Host.HttpListener lib

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top