Я считаю серверный класс DLTransMonCore.cs с использованием C # .Net 4.0.
DLTransMonCore.cs в проекте DLTransMonCore DLL
public void MonStart() {
var client = new WebSignalrClient();
client.HubUrl = "http://10.20.30.40/MyApp";
client.HubName = "MyAppHub";
client.InitialSignalrHub();
}
WebSignalrClient.cs в проекте DLL WebSignalrClient
public string HubUrl;
public string HubName;
public void InitialSignalrHub() {
var hubConnection = new HubConnection(HubUrl);
var hubProxy = hubConnection.CreateHubProxy(HubName);
hubConnection.Start().Wait();
}
Этот сервер будет подключаться к веб-сайту с помощью сигнализатора (1.2.2). И слушайте, некоторые порты используют сокет как сервер сокетов.
1-й сценарий,
Я использую консольное приложение ( Program.cs ), чтобы создать экземпляр класса DLTransMonCore и запустить его.
Все отлично работает.
Program.cs
static void Main(string[] args) {
var core = new DLTransMonCore();
core.MonStart();
Console.Readkey();
}
2-й сценарий,
Я создаю службы Windows ( Service1.cs ) для экземпляра класса DLTransMonCore и запускаю его. Когда я пытаюсь запустить «Service1» в службах Windows, «Service1» запускается примерно на 10 секунд, а затем автоматически останавливается Windows.
Service1.cs
protected override void OnStart(string[] args) {
var core = new DLTransMonCore();
core.MonStart();
}
Я написал файл журнала, чтобы определить, какая строка была выполнена последним:
hubConnection.Start (). Wait (); (в WebSignalrClient.cs),
и он никогда не достигнет следующей строки.
3-й сценарий,
Я создаю другую службу Windows ( Service2.cs ) для экземпляра WebSignalrClient напрямую. И этот «Сервис2» стартовал успешно. (hubConnection.Start (). Wait (); успешно выполнен и достигает следующей строки)
Service2.cs
protected override void OnStart(string[] args) {
var client = new WebSignalrClient();
client.HubUrl = "http://10.20.30.40/MyApp";
client.HubName = "MyAppHub";
client.InitialSignalrHub();
}
Почему Service1 будет неудачным, а Service2 успешным?
Любой комментарий будет оценен!
Edit:
Описание этого поста упрощено из моего "Оригинального решения". Оригинальное решение имеет множество моделей, репозиториев, интерфейсов, утилит, расширений, проектов ... и т. Д.
Поэтому я должен упростить это, чтобы описать мою проблему.
Но я только что создал другое «Новое решение» с минимизированным кодом для тестирования Scenario2 и Scenario3.
Тогда я обнаружил, что «Новое решение» сработало. Это действительно беспокоит меня ...
Теперь я должен повторно протестировать и просмотреть свой код в «Исходном решении».
Но если у вас есть какие-либо предложения или комментарии, пожалуйста, оставьте комментарий.
Спасибо!
Редактировать 2:
Дорогие все, этот шаблон не проблема.
Я нашел свою проблему в «Первоначальном решении».
Проблема: NullReferenceException.
Причина в том, что когда Windows запускает Службу, рабочий каталог НЕ , где существовал ваш Service.exe.
В моем решении у меня есть файл конфигурации для настройки в расположении этой службы. И Сервис получит конфигурацию, используя имя файла напрямую. Затем служба получит нулевой объект, и при запуске службы будет пытаться получить доступ к конфигурации при появлении NullReferenceException.