Я хочу сделать службу Windows, которая получит доступ к моей базе данных. Моя база данных является SQL Server 2005.
На самом деле я работаю над веб-сайтом, и моя база данных в нашем сервере. Я должен получать доступ к своей базе данных каждую секунду и обновлять записи. С этой целью я должен сделать службу Windows, которая установит в наш сервер и выполнит задачу.
Я получал доступ к базе данных от своей локальной машины и затем выполнял сервис, но проблема, я не уверен, как я могу протестировать этот сервис.
Я пытался установить в свою локальную машину. Это установило, и затем я выполнил сервис, но это не выполнило задачу, и я думаю, что сервис не может соединиться с базой данных.
Нет никакой проблемы в сервисе, ни его установщике. Единственная проблема - то, как протестировать мою службу Windows.
Вы можете прикрепить решение Visual Studio к приложению службы Windows. Затем вы можете отлаживать службу Windows, как обычный проект.
Отладка -> Присоединить к процессу.
Используйте регистратор для сообщений об ошибках!
Постарайтесь отловить все возможные ошибки и записать их в файл и / или лучше отправить электронное письмо: помните, что «никто не слышит, что служба умирает»!
Log4Net имеет регистратор для обработки сменяющихся файлов, сохраняемости данных и даже сообщений SMTP. Например, см. http://logging.apache.org/log4net/release/config-examples.html Вероятно, вам придется регулярно проверять файл журнала на наличие ошибок. Чтобы избежать такой работы, я часто использую приложение SMTP.
Ура, B.
Есть несколько способов:
1) Создать стандартное приложение Windows, которое вызывает тот же код, его легче запускать и отлаживать. Это также гарантирует, что ваш служебный код не будет полностью внутри службы, а будет преобразован в его собственную сборку.
2) В файле серверной программы определите, запускается ли служба в интерактивном режиме, и вызовите методы службы внутри службы для однократного запуска. Таким образом, вы также можете просто запустить из Visual Studio. (вам нужно будет сделать свои методы обслуживания общедоступными и создать экземпляр своей службы)
Думаю, каждый дал много хороших ответов. Это был бы мой упорядоченный подход к отладке этой проблемы:
Вы всегда можете создать гибрид сервиса / консольного приложения и использовать консольное приложение для тестирования.
Вам нужно сделать что-то вроде этого - в вашем program.cs
измените метод Main
, чтобы либо запустить службу, либо, при желании, запустить как консольное приложение:
static class Program
{
static void Main(params string[] args)
{
string firstArgument = string.Empty;
if (args.Length > 0)
{
firstArgument = args[0].ToLowerInvariant();
}
if (string.Compare(firstArgument, "-console", true) == 0)
{
new YourServiceClass().RunConsole(args);
}
else
{
ServiceBase[] ServicesToRun = new ServiceBase[] { new YourServiceClass() };
ServiceBase.Run(ServicesToRun);
}
}
, а затем в своем классе обслуживания, который наследуется от ServiceBase
и имеет OnStart
и OnStop
, добавьте метод RunConsole
следующим образом :
public void RunConsole(string[] args)
{
OnStart(args);
Console.WriteLine("Service running ... press <ENTER> to stop");
//Console.ReadLine();
while (true)
{ }
OnStop();
}
Теперь, если вы хотите запустить приложение для проверки его функциональности, просто запустите EXE с параметром командной строки -console
и установите точку останова в методе RunConsole
.