2008-11-11 90 views
14

我開發是迄今爲止使用HttpListener提供一個獨立的小HTTP服務器的應用程序。不過,我最近發現,HttpListener需要以管理員身份運行,這是不是總是將是可能的。替代HttpListener?

什麼會的最佳替代品是什麼?我需要的HTTP GET和POST,這兩者不是簡單地讀/在文件系統中寫入文件,它們需要運行自定義.NET代碼。

到目前爲止,我的研究已經提出了卡西尼,但據我所知,我將不得不編寫一個自定義版本。還有別的事嗎?在與HttpListener具有相同接口的特定項目中,但不需要管理員權限將非常棒!

+9

HttpListener不需要以管理員身份運行,如果你先執行正確的「netsh http add urlacl ...」東西 – 2009-12-20 16:22:07

回答

8

一種選擇是C# Webserver CodePlex上。

「...可以嵌入在任何.NET應用程序,它具有模塊化設計,其中特徵是使用模塊相加,服務器也支持REST和所有HTTP謂詞柔性http服務器...」

它有一個HttpListener類,我想象是類似於System.Net.HttpListener,但我沒有使用過其中任何一個,所以我不能確定。

+0

我相信這是基於套接字的,不需要管理員授權。 – 2009-11-13 14:14:56

3

對此的一個解決方案由this other question涵蓋 - 您可以授予您以非管理員身份運行HttpListener的權限。

您可以從命令文件中啓動應用程序,該文件對權限進行排序,然後運行真實應用程序。

+0

這不是真正的選擇,因爲應用程序需要像常規桌面應用程序一樣容易安裝。 – Grokys 2008-11-11 11:55:50

+0

我已經走下了網路。我假設我可以運行netsh命令作爲安裝程序的一部分。許多安裝程序請求提升的權限,即使應用程序沒有。 – 2011-08-17 22:01:38

0

好吧,所以你有一個普通的桌面應用程序,需要允許入站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

3

像威爾院長您的文章評論說,你可以運行下面的netsh命令:

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

替代的「http:// +:8346 /」你的價值,這也讓任何經過身份驗證的用戶在目標端點上運行Web服務器。

2

關於聲明:

我最近發現,HttpListener需要以管理員身份運行

這是不完全正確和其他一些答案觸及的原因之一,但有另一個:

  1. 其他海報注意到:您可以授予權限給非管理員。好,但不是很好。
  2. 你可以聽在localhost上,甚至在端口80,而不管理員。注意:我記得只有「localhost」可以工作,而不是「127.0.0.1」...所以請確保您將localhost傳遞給您的Prefixes.Add調用。

我們運送一個內部工具,它允許開發人員在他們的PC上運行一個基於HTTP的應用主機,我們首先使用HttpListener不可能想到由於管理員(或管理員授予的權限)的問題,但後來我們發現localhost在沒有Admin的情況下工作得很好。這種說法有道理:外部聆聽是「危險」的,但在本地機器上聽並不是那麼危險。

0

Nowin是一個偉大的圖書館,可以集成在Owin作爲ServerFactory而不依賴於HttpListener。可以順利取代Microsoft.Owin.Host.HttpListener免安裝