Проблема с тестированием службы Windows

Я хочу сделать службу Windows, которая получит доступ к моей базе данных. Моя база данных является SQL Server 2005.

На самом деле я работаю над веб-сайтом, и моя база данных в нашем сервере. Я должен получать доступ к своей базе данных каждую секунду и обновлять записи. С этой целью я должен сделать службу Windows, которая установит в наш сервер и выполнит задачу.

Я получал доступ к базе данных от своей локальной машины и затем выполнял сервис, но проблема, я не уверен, как я могу протестировать этот сервис.

Я пытался установить в свою локальную машину. Это установило, и затем я выполнил сервис, но это не выполнило задачу, и я думаю, что сервис не может соединиться с базой данных.

Нет никакой проблемы в сервисе, ни его установщике. Единственная проблема - то, как протестировать мою службу Windows.

18
задан Welbog 5 April 2010 в 12:10
поделиться

5 ответов

Вы можете прикрепить решение Visual Studio к приложению службы Windows. Затем вы можете отлаживать службу Windows, как обычный проект.

Отладка -> Присоединить к процессу.

12
ответ дан 30 November 2019 в 06:59
поделиться

Используйте регистратор для сообщений об ошибках!

Постарайтесь отловить все возможные ошибки и записать их в файл и / или лучше отправить электронное письмо: помните, что «никто не слышит, что служба умирает»!

Log4Net имеет регистратор для обработки сменяющихся файлов, сохраняемости данных и даже сообщений SMTP. Например, см. http://logging.apache.org/log4net/release/config-examples.html Вероятно, вам придется регулярно проверять файл журнала на наличие ошибок. Чтобы избежать такой работы, я часто использую приложение SMTP.

Ура, B.

3
ответ дан 30 November 2019 в 06:59
поделиться

Есть несколько способов:

1) Создать стандартное приложение Windows, которое вызывает тот же код, его легче запускать и отлаживать. Это также гарантирует, что ваш служебный код не будет полностью внутри службы, а будет преобразован в его собственную сборку.

2) В файле серверной программы определите, запускается ли служба в интерактивном режиме, и вызовите методы службы внутри службы для однократного запуска. Таким образом, вы также можете просто запустить из Visual Studio. (вам нужно будет сделать свои методы обслуживания общедоступными и создать экземпляр своей службы)

2
ответ дан 30 November 2019 в 06:59
поделиться

Думаю, каждый дал много хороших ответов. Это был бы мой упорядоченный подход к отладке этой проблемы:

  • Проверьте журнал событий.
  • Регистрируйте все ошибки (Log4Net, Enterprise Library или просто записывайте в журнал событий), особенно попробуйте try..catch в методе Main.
  • Напишите модульные тесты, которые можно запускать в среде.
  • Убедитесь, что ваш файл app.config правильный. Возможно, вам потребуется объединить значения из разных проектов в один.
  • Проверить подключение к базе данных. Пингуйте сервер. Telnet к порту 1433 (если по умолчанию SQL Server). Напишите простое консольное приложение для тестирования.
  • Отладка путем присоединения к процессу.
  • Используйте гибридный подход консоль / сервис (отличный метод, который я использую для потоковой передачи отладочных сообщений в реальном времени).
2
ответ дан 30 November 2019 в 06:59
поделиться

Вы всегда можете создать гибрид сервиса / консольного приложения и использовать консольное приложение для тестирования.

Вам нужно сделать что-то вроде этого - в вашем 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 .

20
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: