替代HttpListener?

问题描述:

我开发是迄今为止使用HttpListener提供一个独立的小HTTP服务器的应用程序。不过,我最近发现,HttpListener需要以管理员身份运行,这是不是总是将是可能的。替代HttpListener?

什么会的最佳替代品是什么?我需要的HTTP GET和POST,这两者不是简单地读/在文件系统中写入文件,它们需要运行自定义.NET代码。

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

+9

HttpListener不需要以管理员身份运行,如果你先执行正确的“netsh http add urlacl ...”东西 – 2009-12-20 16:22:07

一种选择是C# Webserver CodePlex上。

“...可以嵌入在任何.NET应用程序,它具有模块化设计,其中特征是使用模块相加,服务器也支持REST和所有HTTP谓词柔性http服务器...”

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

+0

我相信这是基于套接字的,不需要管理员授权。 – 2009-11-13 14:14:56

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

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

+0

这不是真正的选择,因为应用程序需要像常规桌面应用程序一样容易安装。 – Grokys 2008-11-11 11:55:50

+0

我已经走下了网路。我假设我可以运行netsh命令作为安装程序的一部分。许多安装程序请求提升的权限,即使应用程序没有。 – 2011-08-17 22:01:38

好吧,所以你有一个普通的桌面应用程序,需要允许入站http连接 - 嗯 - 不会是Windows防火墙的问题?

假设没有,这听起来几乎就像一个web服务 - 你可以走这条路 - 通过该网址公开URL?尽管我的.Net知识还不够深入,无法确定是否仍需要运行特定的http服务器来回答请求。 Spring.Net可能值得一看。我发现

+0

不,它只会从本地主机接收连接 - 应用程序是同时安装的Adobe AIR应用程序的代理。 – Grokys 2008-11-11 12:23:39

+0

另外,我已经考虑过web服务,但服务器将主要提供二进制文件,这不太适合web服务。 – Grokys 2008-11-11 12:26:04

像威尔院长您的文章评论说,你可以运行下面的netsh命令:

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

替代的“http:// +:8346 /”你的价值,这也让任何经过身份验证的用户在目标端点上运行Web服务器。

关于声明:

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

这是不完全正确和其他一些答案触及的原因之一,但有另一个:

  1. 其他海报注意到:您可以授予权限给非管理员。好,但不是很好。
  2. 你可以听在localhost上,甚至在端口80,而不管理员。注意:我记得只有“localhost”可以工作,而不是“127.0.0.1”...所以请确保您将localhost传递给您的Prefixes.Add调用。

我们运送一个内部工具,它允许开发人员在他们的PC上运行一个基于HTTP的应用主机,我们首先使用HttpListener不可能想到由于管理员(或管理员授予的权限)的问题,但后来我们发现localhost在没有Admin的情况下工作得很好。这种说法有道理:外部聆听是“危险”的,但在本地机器上听并不是那么危险。

Nowin是一个伟大的图书馆,可以集成在Owin作为ServerFactory而不依赖于HttpListener。可以顺利取代Microsoft.Owin.Host.HttpListener免安装