web-dev-qa-db-ja.com

System.ServiceModel.AddressAccessDeniedException:HTTPはURL http :: 8080を登録できませんでした

最初のセルフホストWCFサービスを作成しました。私はそれをC#コンソールアプリでホストしましたが、エラーがスローされます:

System.ServiceModel.AddressAccessDeniedException:HTTPがURL httpを登録できませんでした:8080

管理者としてVisual Studio 2013を実行すると、うまく動作しますが、そうでない場合は動作しません。 VSをADMINとして起動する代わりに、自動的に実行する方法はありますか?

これまで、HelloServiceクラスライブラリを作成し、そこにインターフェイスIHelloServiceHelloServiceで構成されるWCFサービスを追加しました。

IHelloService

namespace HelloService
{
    [ServiceContract]
    public interface IHelloService
    {
        [OperationContract]
        String GetMsg();
    }
}

HelloService

namespace HelloService
{
    public class HelloService : IHelloService
    {
        public String GetMsg()
        {
            return "Service Accessed";
        }
    }
}

次に、app.configファイルを持つC#コンソールアプリHelloServiceHostを作成しました。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors >
        <behavior name="MexBehaviour">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="HelloService.HelloService" 
               behaviorConfiguration="MexBehaviour" >
        <endpoint 
            address="HelloService" 
            binding="basicHttpBinding" 
            contract="HelloService.IHelloService"></endpoint>
        <endpoint 
            address="HelloService" 
            binding="netTcpBinding" 
            contract="HelloService.IHelloService"></endpoint>
        <endpoint 
            address="mex" 
            binding="mexHttpBinding" 
            contract="IMetadataExchange"></endpoint>
        <Host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/"/>
            <add baseAddress="net.tcp://localhost:8081/"/>
          </baseAddresses>
        </Host>
      </service>
    </services>
  </system.serviceModel>
</configuration> 

およびprogram.csファイル:

using HelloService;
using System.ServiceModel;

namespace HelloServiceHost
{
    class Program
    {
        static void Main(string[] args)
        {
            using(ServiceHost sh = new ServiceHost(typeof(HelloService.HelloService)))
            {
                sh.Open();
                Console.WriteLine("Host Started @"+ System.DateTime.UtcNow.ToShortDateString());
                sh.Close();
            }
        }
    }
}

ビデオチュートリアルに正確に従いましたが、なぜ機能しないのですか?

VS 2013、.net 4を使用しています

22
user3432348

管理者としてcmdを起動し、次を入力します。

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

これは私のために働いた。

23
franconegro

別のプロジェクトで同じ問題に遭遇しました。

問題は、TCPポートへのバインドには管理者特権が必要なことです。これに対処するには、いくつかの方法があります。

  1. 管理コマンドプロンプトを開いたままにします。その後、コンソールアプリを直接実行できます。

  2. (提案どおり)VSを管理者として実行します。これは、アプリをデバッグする場合にのみ絶対に必要です。

  3. RequestedExecutionLevel level = "requireAdministrator"を指定して、アプリケーションマニフェストファイルを作成します。 。NETアプリケーションを管理者として強制的に実行するにはどうすればよいですか? を参照してください。

18
Taladon

ルートパスURL( http:// +:8080 / )権限が必要な場合:

netsh http add urlacl url=http://+:8080/ user=%USERDOMAIN%\%USERNAME%

すべてのURL予約を表示:

netsh http show urlacl | FIND "URL"
7

Windowsサービスでサービスを開始中にこのエラーが発生した場合、プロセスインストーラーでアカウントを確認できます。

[RunInstaller(true)]
public class ProjectInstaller : Installer
{
    private ServiceProcessInstaller process;
    private ServiceInstaller service;

    public ProjectInstaller()
    {
        process = new ServiceProcessInstaller();
        process.Account = ServiceAccount.LocalSystem;
        service = new ServiceInstaller();
        service.ServiceName = "WCFWindowsServiceSample";
        Installers.Add(process);
        Installers.Add(service);
    }
}
0
user3096335