自己ホストのOWIN Web APIを非管理者アカウントで実行することはできますか?私はすでに数十のURL予約を試みましたが、何も機能しません。サービスは「アクセスが拒否されました」で開始に失敗します。アカウントが管理者ロールに追加されたときに機能しますが、それは望ましくありません。以下のコードは、Win 7フレームワーク4.5.2で実行されています。
//install-package Microsoft.owin.hosting
//install-package Microsoft.Owin.Host.HttpListener
StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:5000/");
//options.Urls.Add(string.Format("http://{0}:5000", Environment.MachineName));
//options.Urls.Add("http://+:5000/");
//options.Urls.Add("http://*:5000/");
using (WebApp.Start<WebAPISelfHostMinimal.Startup>(options))
{
while (!Terminate)
{
await Task.Delay(10); //keep cpu from getting pegged
}
LogUtil.LogInfo("Terminating owin Host.");
}
[〜#〜] edit [〜#〜]-これはWindowsアカウントで実行されています。
C:\>netsh http add urlacl http://+:5000/ user=mini2012\svcAPI
URL reservation successfully added
C:\>sc start apiservice
[SC] StartService FAILED 5:
Access is denied.
C:\>netsh http add urlacl http://*:5000/ user=mini2012\svcAPI
URL reservation successfully added
C:\>sc start apiservice
[SC] StartService FAILED 5:
Access is denied.
C:\>netsh http add urlacl http://localhost:5000/ user=mini2012\svcAPI
URL reservation successfully added
C:\>sc start apiservice
[SC] StartService FAILED 5:
Access is denied.
問題はURL予約にあったようです。必要ありませんでした。 URLの予約がある場合、owinホストがアクセス拒否エラーで開始するのを防ぐだけです。また、owinホストのデフォルトポートは5000です。そのポートでまだ実行中の「デッド」プロセスがある場合、サービスの開始がブロックされます。確認するには、コマンドプロンプトでnetstat -a -b
を実行します。
サービスは(ほとんどの場合)LocalSystem(SYSTEM)アカウントで実行されています。このアカウントはEveryoneセキュリティプリンシパルにはありません。
つまり、これを解決するには、匿名ログオン用に名前空間を予約するか、Everyoneプリンシパルにあるネットワークサービスアカウントで実行するようにサービスを変更します。
3番目のオプションは、もちろん、新しいローカル/ドメインユーザーを作成し、その予約を作成し、このアカウントでサービスを実行することです。ただし、適切なセキュリティアクセス許可を設定する必要があるため、最初の2つのオプションのいずれかを使用します。
解決策を探していて、テキストを読んでいない人のために。
解決策は、管理者としてVisual Studioを実行することです。
Adminでこのコマンドラインを実行します
netsh http add urlacl url = http:// *:8080/user = MyUser