2016-07-05 7 views
0

私はコンソールプロジェクトから始める作業Web APIサービスを持っています。 これをサービスとして実行したいと考えています。このコードでinstallutil.exe使用してサービスとしてインストールOwinセルフホストasp.net Web apiがサービスとして起動したときに接続を拒否します

イム:

[RunInstaller(true)] 
public class ApplicationInstaller:Installer 
{ 
    private ServiceProcessInstaller processInstaller; 
    private ServiceInstaller serviceInstaller; 

    public ApplicationInstaller() 
    { 

     serviceInstaller = new ServiceInstaller(); 
     processInstaller = new ServiceProcessInstaller(); 
     processInstaller.Account = ServiceAccount.LocalSystem; 

     serviceInstaller.StartType = ServiceStartMode.Automatic; 
     serviceInstaller.ServiceName = "WTT Rumsa"; 
     serviceInstaller.Description = "Web API for WTT Rumsa"; 

     Installers.Add(serviceInstaller); 
     Installers.Add(processInstaller); 


    } 



} 

これは私がサービスを開始するために使用するものである:

 public static void StartService() 
    { 
     var startOptions = new StartOptions(); 
     var internalURL = $"http://{Environment.MachineName}:6666"; 
     startOptions.Urls.Add(internalURL); 
     _logger.Debug($"Service started at: {internalURL}"); 

     startOptions.Urls.Add("http://localhost:6666"); 


     foreach(var address in Dns.GetHostEntry(Dns.GetHostName()).AddressList) 
     { 
      if(address.AddressFamily==AddressFamily.InterNetwork) 
      { 
       var ipURL = $"http://{address.ToString()}:6666"; 

       _logger.Debug($"Service started at: {ipURL}"); 

       startOptions.Urls.Add(ipURL); 


      } 
     } 

     using(WebApp.Start<SelfHostConfiguration>(startOptions)) 
     { 
      Console.WriteLine($"Service started and listening at {internalURL}"); 
      Console.ReadLine(); 
     } 
    } 

私はサービス私のロガー・ショーを開始するとStartService()を通って実行されていることを確認します。 私は私のクライアントで私が呼んでいるIPを追加したのを見ることができます。 サービスを開始してもサービスは停止しません。 アカウントの種類がServiceAccount.LocalSystemあるので

をし、それが実際にスロースタート(としない「対象のコンピュータによって拒否されたため、接続していません」:私はこのメッセージを取得する接続するときしかし

例外)、権限は大丈夫です。 私は使用しているポートのローカルファイアウォールに例外を追加しました。

他に何が間違っていますか?

編集: コンソールとサービスとして実行されているwebserviceがコマンドウィンドウに表示され、サービスとして実行されている場合はリストに表示されず、コンソールアプリケーションとして実行されます。ファイアウォール設定の問題?

答えて

0

私は解決策(または問題)を見つけた まず、コンソールアプリケーションをサービスとして実行すると、コンパイラはConsole.WriteLineとConsole.ReadLineをスキップします(コンソールタイプ全体がちょうど無視されると思います)

これは、プログラムが私のusingステートメントから抜け出ることを意味します。

これは明らかにサーバーが破棄されているために悪いことです。 デバッグが困難になったのは、Console.ReadLineがなくても、サービスが停止するまで終了しないという事実でした。それが通常のコンソールアプリケーションであれば、終了しました。 だから、解決策は、ちょうどこのようなサービスを開始しました:あなたはServiceBase.Run(...)を使用する必要があり、ServiceBaseクラスを実装

_webapp = WebApp.Start<SelfHostConfiguration>("http://+:8080");

1

を。 ServiceBase.Run(...)は、Windowsサービスホストからの停止を受信するまでブロッキング呼び出しです。 例here

関連する問題