Итак, я застрял в этой проблеме около недели. Я пытался запустить проект, чтобы получить TCP-соединение и запустить концентратор SignalR в качестве службы. Оба отлично работали над проектом как файл .exe. Часть TCP будет работать отлично, однако у меня были проблемы со стороной SignalR.
Причиной стало применение с помощью.
До
using (WebApp.Start<SignalrStartup>(url))
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Server running on {0}", url); // was url
Console.WriteLine("ID\tMessage");
Console.ReadLine();
}
После
WebApp.Start<SignalrStartup>(url);
Я попробовал запустить код с Console.WriteLine() закомментированным, так как я думал, что это может вызвать исключение, так как консоль не выводится для запуска в качестве службы. Это также не сработало, но также не работало как файл .exe, так как ему нужно было Console.ReadLine(), чтобы консоль открывалась, вроде того, как вам нужно, чтобы сохранить HelloWorld.cs. После удаления с использованием оболочки вместе с консолью она будет работать как в .exe, так и в сервисе.
Я прочитал, что оператор с использованием убивает объекты в нем, как только вы покидаете оболочку. Но я не понимаю, как бит после держит код .exe открытым после запуска. Есть ли смысл использовать с помощью, или я использовал его неправильно?
Edit
protected override void OnStart(string[] args)
{
Task.Factory
.StartNew(() => StartTCP())
.ContinueWith(t => StartSignalR());
}
Вызов выполняется из метода StartSignalR().