2012-01-04 61 views
146

我是WCF的初學者,但嘗試改善我的體驗。在第一步我面臨這個問題。我創建了最簡單的WCF服務。代碼清單:(所有的代碼在一個文件中)HTTP無法註冊URL http:// +:8000/HelloWCF /。您的程序無權訪問此名稱空間

using System; 
using System.ServiceModel; 

namespace EssentialWCF 
{ 
    [ServiceContract] 
    public interface IStockService 
    { 
     [OperationContract] 
     double GetPrice(string ticker); 
    } 

    public class StockService : IStockService 
    { 
     public double GetPrice(string ticker) 
     { 
      return 94.85; 
     } 
    } 

    class Service 
    { 
     static void Main(string[] args) 
     { 
      ServiceHost serviceHost = new ServiceHost(typeof(StockService), 
                 new Uri("http://localhost:8000/HelloWCF")); 

      serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding()); 
      serviceHost.Open(); 

      Console.WriteLine("To continue press ENTER"); 

      serviceHost.Close(); 
     } 
    } 
} 

這將是通過控制檯給我一個數字的服務。但調試給我例外:(而不是數字:))

HTTP無法註冊網址http://+:8000/HelloWCF/。您的進程無權訪問此名稱空間(有關詳細信息,請參見http://go.microsoft.com/fwlink/?LinkId=70353)。

你有沒有遇到同樣的情況?我會很高興看到每一個建議。

+0

我很困惑。那個HTML轉義的文本應該是代碼的一部分嗎? – Amy 2012-01-05 04:10:01

+1

尋找其他選項[http://stackoverflow.com/questions/885744/wcf-servicehost-access-rights] – shankbond 2014-06-13 08:12:15

+0

謝謝@shankbond – User 2015-01-13 04:54:58

回答

0

由於您忘記在serviceHost.Close()行之前包含Console.ReadLine(),因此您的示例代碼將無法正常顯示。這意味着主機打開後立即關閉。

除此之外,你的機器似乎有權限問題。確保您以計算機上的管理員帳戶登錄。如果您是管理員,則可能是因爲您沒有運行萬維網發佈服務(W3SVC)來處理HTTP請求。

+0

我已經解決了這個問題,這不是因爲我的cmd帳戶和(的當然)不是因爲ReadLine() - 導致該點處於例外狀態(不是cmd結果)。 – valecoder 2012-01-04 15:00:59

+0

我用http://stackoverflow.com/questions/885744/wcf-servicehost-access-rights解決了這個問題。 – valecoder 2012-01-04 15:01:58

160

我關閉了Visual Studio IDE,並通過右鍵單擊Visual Studio圖標並說「以管理員身份運行」重新打開它,然後當我運行主機時,它工作了!

+16

首先,儘管Visual Studio在這裏沒有多少選擇,但這是不好的做法。其次,問題仍然存在於其他步驟(例如部署)。見Bryan的回答或http://blogs.msdn.com/b/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx – 2013-08-30 10:30:21

+3

好悲傷! Friggin MS,做出不同的功能,自己打架。 「最小特權」非常重要。 – 2013-09-12 20:56:48

+0

最佳實踐與否,這是在MS上。爲什麼它是WCF/.NET如此特別以至於需要更多的箍環來跳過?如果我使用運行在Windows上的Java編寫服務,那麼它在本地工作。如果我想讓它公開,我調整防火牆,切換器,路由器等。 – 2015-12-19 19:56:40

4

在Windows Vista和更高版本中,HTTP WCF服務的東西會導致您提到的異常,因爲受限制的帳戶沒有這個權限。這就是爲什麼它以管理員身份運行時的原因。

每個明智的開發人員都必須使用RESTRICTED帳戶而不是管理員,但許多人走錯了方向,這就是爲什麼有那麼多應用程序需要管理員權限,當他們不是真正需要時。懶惰的工作方式導致懶惰的解決方案。我希望你仍然在受限制的帳戶工作(我的祝賀)。

如果我沒有記錯的話,那裏有一個名爲NamespaceManagerTool的工具(從2008年左右開始),它應該爲您爲WCF定義的這些服務URL授予受限用戶權限。我沒有使用過,雖然...

+0

您正在考慮的工具稱爲Http Namespace Manager。它不受MS支持,但在以下位置提供:http://blogs.msdn.com/b/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx – Gareth 2014-11-27 16:24:39

11

你需要一些管理員權限到您的帳戶,如果你的局域網中的機器,那麼你申請一些管理員權限到您的用戶否則你應該以管理員身份啓動IDE ...

+1

This是我需要爲我的WCF Windows服務做的事情。我正在使用新的域帳戶在構建機器上運行該服務。我的服務會啓動,然後拋出異常。一旦我給了它管理員權限,它就完美了。 – thehelix 2014-12-10 20:27:58

+0

這解決了它對我來說。只需右鍵單擊該服務,然後在「登錄」選項卡中選擇「本地系統帳戶」 – 2015-11-09 15:10:29

185

不幸的是,異常文本http://go.microsoft.com/fwlink/?LinkId=70353中的鏈接被破壞。但是,它曾經導致http://msdn.microsoft.com/en-us/library/ms733768.aspx解釋瞭如何設置權限。

基本上,它會通知您使用以下命令:

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

可以使用的netsh

例如幫助下獲得細節上更多的幫助:netsh http add ?

給人幫助在http add命令。

+3

此方法對於在自動測試服務器上設置所需權限也很有用。 – Technobabble 2013-07-30 21:26:44

+6

這應該是被接受的答案。 – 2015-12-31 12:44:16

+3

確保從管理員命令提示符運行該命令。 – mbonness 2016-07-17 16:00:50

8

您需要做的簡單事情就是關閉Visual Studio環境並使用'以管理員身份運行'再次打開它。它現在應該可以成功運行。

+12

以管理員身份運行只會避免問題,但並不能解決問題。 – ProfK 2014-11-24 06:06:35

0

關閉iis express和所有瀏覽器(如果URL在任何瀏覽器中打開)。也以管理員模式打開Visual Studio IDE。這已經解決了我的問題。

7

右鍵單擊Visual Studio>以管理員身份運行>打開項目並運行該服務。 這是一個權限相關的問題。

0

儘管我可以在其他用戶解決方案之後的一臺計算機上解決此問題,但命令netsh未能解決我的某臺計算機中的問題,即使當前用戶擁有管理員權限,我仍然可以獲得「HTTP無法註冊URL ....您的進程無權訪問此名稱空間」。所以我分享我的解決方案,以防您仍然無法與其他解決方案一起使用。

之後也試圖給我的網站的物理目錄中的用戶寫權限,並沒有取得成功,我終於決定嘗試更改IIS設置

正如下面展示的圖片,我配置了物理路徑憑據我的網站連接作爲specifc用戶,這是一個管理員帳戶與域\用戶名和密碼,這是足以讓錯誤disapear。

enter image description here

enter image description here

enter image description here

相關問題