15

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

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

到目前为止,我的研究已经提出了 Cassini,但据我所知,我必须编写一个自定义版本。还有别的事吗?特别是与 HttpListener 具有相同界面但不需要管理员权限的东西会很棒!

4

7 回答 7

8

我发现的一种替代方法是CodePlex 上的C# Webserver

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

它有一个 HttpListener 类,我认为它类似于 System.Net.HttpListener,但我还没有使用其中任何一个,所以我不能确定。

于 2009-11-13T14:11:02.750 回答
4

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

您可以从整理权限的命令文件启动应用程序,然后运行真正的应用程序。

于 2008-11-11T11:53:39.657 回答
3

就像 Will Dean 在您的帖子中所说的那样,您可以运行以下 netsh 命令:

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

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

于 2012-03-12T11:24:44.543 回答
3

关于声明:

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

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

  1. 其他发帖人指出:您可以向非管理员授予权限。很好,但不是很好。
  2. 您可以在 localhost 上收听,甚至在端口 80 上收听,而无需成为管理员。注意:我记得只有“localhost”有效,而不是“127.0.0.1”......所以请确保将 localhost 传递给 Prefixes.Add 调用。

我们正在发布一个内部工具,允许开发人员在他们的 PC 上运行基于 HTTP 的应用程序主机,我们起初认为由于管理员(或管理员授予的权限)问题而无法使用 HttpListener,但后来我们发现localhost 无需管理员即可正常工作。这有点道理:从外部收听是“危险的”,但在本地机器上收听并不那么危险。

于 2013-09-30T18:50:57.317 回答
1

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

于 2019-02-04T11:33:54.137 回答
0

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

假设不是,它听起来几乎像一个网络服务——你能走那条路吗——通过它公开 URL 吗?尽管我的 .Net 知识还不够深入,无法知道您是否仍需要运行特定的 http 服务器来响应请求。 Spring.Net可能值得一看。

于 2008-11-11T12:17:26.347 回答
0

Nowin是一个很棒的库,可以在OwinServerFactory依赖于HttpListener. 能够Microsoft.Owin.Host.HttpListener顺利插入替换库

于 2015-07-17T11:09:02.010 回答