2013-04-17 11 views
15

私のアプリはNancy Selfhostingを使用しています。私が管理者権限なしで起動すると、System.Net.HttpListenerException "アクセス拒否"が発生します。私も成功せずに別のポートを試してみました管理者権限を持たないcan not start nancy自己ホスト

static void Main(string[] args) 
    { 
     var nancyHost = new Nancy.Hosting.Self.NancyHost(new Uri("http://localhost:80/")); 
     nancyHost.Start(); 
     Application.Run(); 
    } 

:ここ

はコードです。不思議なことに、同じURLをリッスンするHttpListenerを起動すると、例外が発生しません。この例外の原因は何ですか?

+0

すでにポート80で動作しているものはありますか? –

+1

あなたの 'HttpListener'テストに欠陥があると思います。私はWindows 7上で上昇していないときに '.GetContext()'の間にアクセス拒否を取得します。 –

+0

もちろん、私のプログラムではさらにいくつかのアプリケーションロジックがあります。また、アプリケーション全体が、HttpListenerの周りに構築された "自己ビルド" Webサーバーで完全に動作します。私は拡張性などのためにnancyを使いたいと思っていましたが、管理者権限で起動しなければならないのは、私たちの顧客のためのものです。 – kroax

答えて

40

localhostルートを書き換えないようにセルフホスト設定を設定する必要があります。

namespace NancyApplication1 
{ 
    using System; 
    using Nancy.Hosting.Self; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var uri = 
       new Uri("http://localhost:3579"); 
      var config = new HostConfiguration(); 
      config.RewriteLocalhost = false; 

      using (var host = new NancyHost(config, uri)) 
      { 
       host.Start(); 

       Console.WriteLine("Your application is running on " + uri); 
       Console.WriteLine("Press any [Enter] to close the host."); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

私は少しをしようとし、失敗によってこれを見つけましたが、代わりにthis page explains the reason behind.

+0

チャームのように働いた。 – ritcoder

+0

しかし、マシンのipの代わりに 'localhost'からアドレスにアクセスすることができます。そうしないと、クライアントは400エラーを表示します。あなたはそれを修正する方法を知っていますか? –

+0

@JeffreyZhao Ashtonianの答えを見てください。 – robpvn

4

からdocumentationから:

注Windows上HttpListenerExceptionがアクセス拒否でスローされる可能性がホストしていることメッセージ。これを解決するには、URLをACLに追加する必要があります。 また、サービスへのアクセスを許可するには、ポートをマシンまたは企業のファイアウォール上で開く必要があります。あなたがACLから削除する必要がある場合

netsh http add urlacl url=http://+:8080/ user=DOMAIN\username 

は、次のコマンドを実行して、ACLに追加

netsh http delete urlacl url=http://+:8080/ 
0

あなたはケストレルでナンシーをホスティングすることができます。それは本当にシンプルです:

public void Main(string[] args) 
{ 
    var owinHost = new WebHostBuilder() 
     .UseStartup<Startup>() 
     .UseUrls("http://+:12345/") 
     .Build(); 

    owinHost.Run(); 
} 

public class Startup 
{ 
    public void Configure(IApplicationBuilder app) 
    { 
     app.UseOwin(x => x.UseNancy()); 
    } 
} 

唯一の難しさは、必要なすべてのdll(30+)を準備することです。すべての依存関係を解決するには、間違いなくNuGetを使用する必要があります。

関連する問題