Итак, я застрял в этой проблеме около недели. Я пытался запустить проект, чтобы получить 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()
.