コンソール プロジェクトで開始する作業中の Web API サービスがあります。今、私はそれをサービスとして実行したいと考えています。
次のコードで installutil.exe を使用して、サービスとしてインストールします。
[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 であり、実際に開始する (そして例外をスローしない) ため、権限は問題ないはずです。私が使用しているポートのローカル ファイアウォールに例外を追加しました。
他に何が間違っている可能性がありますか?
編集:コンソールおよびサービスとして実行されているWebサービスを使用してコマンドウィンドウでnetstat -anoを実行し、サービスとして実行するとリストに表示されず、コンソールアプリとして実行すると表示されます。ファイアウォールの設定の問題?