Размещение ядра служб Notification Services

Для каждого экземпляра служб Notification Services службы Notification Services 2.0 требовали установки службы Windows на каждом сервере, на котором запускался внутрипроцессный поставщик событий, генератор или распространитель. Для разработчиков, которые хотели перераспределить приложения уведомлений, такой подход увеличивал их развертывания на одну или более служб Windows, кроме того, появлялась еще одна служба для управления.

В SQL Server 2005 можно размещать ядро служб Notification Services, содержащееся в рамках собственных приложений или процессов. При размещении ядра нет необходимости устанавливать службу NS$имя_экземпляра Windows для запуска компонентов ядра. Благодаря этому упрощается внедрение решений служб Notification Services в пользовательские приложения.

Размещение ядра служб Notification Services

Службы Notification Services обеспечивают очень простой API-интерфейс для размещения ядра служб Notification Services. Просто создайте экземпляр класса NSInstance, указав имя экземпляра, который необходимо разместить. Затем вызовите метод StartInstance для запуска ядра. Чтобы остановить ядро, вызовите метод StopInstance. В следующем примере приводится код, необходимый для остановки и запуска ядра:

try
{
    // Instantiate the Notification Services instance.
    NSInstance nsInstance = new NSInstance("FlightInstance");

    // Start the instance.
    Console.WriteLine("Starting instance...");
    nsInstance.StartInstance();

    // Check the IsRunning property to verify that 
    // this process is running the instance.
    if (nsInstance.IsRunning == true)
        Console.WriteLine("The instance is running.");
    else
        Console.WriteLine("The instance is NOT running!");

    // Stop instance.
    Console.WriteLine("Stopping instance...");
    nsInstance.StopInstance();

}
catch (Exception ex)
{
    // Write exception message to the console.
    Console.WriteLine(ex.Message);
}

Ошибки обработки

Во время работы экземпляра могут возникнуть ошибки исполнения. Сообщения о таких ошибках направляются обратно в процесс размещения при помощи делегата ErrorEventHandler, вызываемого при возникновении события Error. При появлении события вызывается делегат, который уведомляет сервер, и экземпляр останавливается.

В следующем примере показано, как реагировать на такое событие:

// Define an error handler for the hosted execution engine.
private void InstanceErrorHandler(object sender, ErrorEventArgs e)
{
    Console.WriteLine (e.GetException ().ToString ());
}

// Start and stop the hosted execution engine.
public void ErrorHandlingStartStop()
{
    try
    {
        // Instantiate the Notification Services instance.
        NSInstance nsInstance = new NSInstance("FlightInstance");

        // Add an error handler to the instance.
        nsInstance.Error += 
            new NSInstance.ErrorEventHandler(InstanceErrorHandler);

        // Start the instance.
        Console.WriteLine("Starting instance...");
        nsInstance.StartInstance();

        // Check the IsRunning property to verify that 
        // this process is running the instance.
        if (nsInstance.IsRunning == true)
            Console.WriteLine("The instance is running.");
        else
            Console.WriteLine("The instance is NOT running!");


        // Stop the instance.
        Console.WriteLine("Stopping instance...");
        nsInstance.StopInstance();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Отправитель — объект NSInstance.

Запуск экземпляра служб Notification Services

Чтобы запустить ядро, которое запускает внутрипроцессные поставщики событий, генераторы и распространители на локальном компьютере, необходимо выполнить следующие действия:

  • Необходимо установить компоненты ядра служб Notification Services на каждом сервере, где работает внутрипроцессный поставщик событий, генератор или распространитель.
  • Необходимо зарегистрировать экземпляр на каждом из указанных серверов. При регистрации экземпляра нет необходимости в создании службы Windows. Размещенное ядро может занять место службы Windows.
  • Необходимо установить приложение на каждом из указанных серверов.
  • Необходимо вызвать код, который создает и запускает экземпляр на каждом из указанных серверов.

При установке службы Windows обратите внимание на то, что нельзя одновременно запустить службу Windows и экземпляр в пользовательском приложении. В любой момент времени только один поток одного процесса может быть «владельцем» экземпляра.

При запуске службы NS$ имя_экземпляра Windows, а затем при попытке запустить в пользовательском приложении экземпляр службы Notification Services вызовут исключение, и пользовательское приложение не запустит экземпляр. Верно и обратное: если при выполнении в приложении экземпляра предпринимается попытка запустить службу Windows, то такая служба запущена не будет.

При прерывании работы потока, владеющего ядром экземпляра на таком сервере, другие потоки такого процесса примут на себя владение экземпляром.

ms171236.note(ru-ru,SQL.90).gifПримечание.
При размещении ядра стандартные инструменты, используемые для запуска и остановки экземпляра, такие, как SQL Server Management Studio, команды net и пункт Службы в пункте «Панель управления», не могут использоваться для запуска и остановки экземпляра.

Требования безопасности

Приложение или процесс, управляющий работой внутрипроцессных поставщиков событий, генераторов и распространителей, должны обладать соответствующими разрешениями Windows и базы данных для выполнения необходимых действий. Сюда входит членство в группе Windows SQLServer2005NotificationServicesUser$ComputerName и в соответствующей роли или ролях баз данных служб Notification Services. Дополнительные сведения о разрешениях, необходимых для запуска экземпляра служб Notification Services, см. в разделах Настройка учетных записей Windows для экземпляра служб Notification Services и Настройка разрешений SQL Server для экземпляра служб Notification Services.

Внедрение компонентов служб Notification Services

При внедрении служб Notification Services в приложение включите следующие сборки:

  • Microsoft.SqlServer.NotificationServices.dll
  • Microsoft.SqlServer.Smo.dll
  • nscontrol.exe

Справку по перераспределению компонентов SQL Server 2005 см. в лицензионном соглашении SQL Server 2005.

См. также

Основные понятия

Вопросы безопасности служб Notification Services
Настройка учетных записей Windows для экземпляра служб Notification Services
Настройка разрешений SQL Server для экземпляра служб Notification Services

Другие ресурсы

Развертывание служб Notification Services

Справка и поддержка

Получение помощи по SQL Server 2005