Hosting del motore di Notification Services

Per ogni istanza di Notification Services, Notification Services 2.0 richiede l'installazione di un servizio Windows su ogni server sul quale viene eseguito un provider di eventi hosted, un generatore, o un server di distribuzione. Per gli sviluppatori che desiderano ridistribuire le applicazioni di notifica, questo aggiunge uno o più servizi Windows alle distribuzioni e crea un servizio ulteriore da gestire.

In SQL Server 2005 è possibile ospitare il motore di Notification Services dall'interno dell'applicazione o dei processi. Se si ospita il motore, non installare il servizio Windows NS$instanceName per eseguire i componenti del motore. Questo semplifica l'incorporamento delle soluzioni Notification Services nell'applicazione.

Hosting del motore di Notification Services

Notification Services include una semplice API per l'hosting del motore di Notification Services. Creare un'istanza della classe NSInstance con il nome dell'istanza da ospitare. Quindi chiamare il metodo StartInstance per avviare il motore. Per interrompere il motore, chiamare il metodo StopInstance. Nell'esempio seguente viene illustrato il codice necessario per interrompere e avviare il motore:

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);
}

Gestione degli errori

Mentre l'istanza è in esecuzione, potrebbero verificarsi errori di run-time. Questi errori vengono segnalati al processo di hosting tramite un delegato ErrorEventHandler richiamato all'attivazione dell'evento Error. Quando l'evento viene generato, il delegato viene chiamato per la notifica all'host e l'istanza viene interrotta.

Nell'esempio seguente viene illustrato come rispondere a questo evento:

// 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);
    }
}

Il mittente è l'oggetto NSInstance.

Esecuzione di un'istanza di Notification Services

Per eseguire il motore che esegue i provider di eventi hosted, i generatori e i server di distribuzione sul computer locale, è necessario eseguire le operazioni seguenti:

  • È necessario installare i componenti del motore di Notification Services su ogni server che esegue un provider di eventi hosted, un generatore o un server di distribuzione.
  • È necessario registrare l'istanza su ognuno di questi server. Quando si registra l'istanza, non è necessario creare il servizio Windows, che può essere sostituito dal motore hosted.
  • È necessario installare l'applicazione su ognuno di questi server.
  • È necessario chiamare il codice che crea e avvia l'istanza su ognuno di questi server.

Se si installa il servizio Windows, si noti che non è possibile avviare il servizio e quindi l'istanza contemporaneamente nell'applicazione. Un solo thread di un solo processo può essere proprietario dell'istanza in un determinato momento.

Se si avvia il servizio Windows NS$instanceName, e quindi si tenta di avviare l'istanza nell'applicazione, Notification Services genererà un'eccezione e l'applicazione non avvierà l'istanza. È vero anche il contrario, ovvero se l'applicazione sta eseguendo l'istanza, e quindi si tenta di avviare il servizio Windows, l'avvio di quest'ultimo non riuscirà.

Se il thread proprietario del motore dell'istanza sul server non riesce, altri thread all'interno del processo possono acquisire la proprietà dell'istanza.

[!NOTA] Se si ospita il motore, gli strumenti standard utilizzati per avviare e interrompere l'istanza, ad esempio SQL Server Management Studio, i comandi net e Servizi nel Pannello di controllo, non possono essere utilizzati per avviare e interrompere l'istanza.

Requisiti di protezione

L'applicazione o il processo controlla il funzionamento dei provider di eventi hosted, dei generatori e dei server di distribuzione e deve disporre delle autorizzazioni di Windows e del database appropriate per eseguire le attività correlate. Tali autorizzazioni implicano l'appartenenza al gruppo di Windows SQLServer2005NotificationServicesUser$ComputerName e l'appartenenza al ruolo o ai ruoli appropriati del database di Notification Services. Per ulteriori informazioni sulle autorizzazioni necessarie per l'esecuzione di un'istanza di Notification Services, vedere Configurazione degli account di Windows per un'istanza di Notification Services e Configurazione delle autorizzazioni di SQL Server per un'istanza di Notification Services.

Incorporamento di componenti di Notification Services

Se si sta incorporando Notification Services nell'applicazione, verificare di includere gli assembly seguenti:

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

Fare riferimento al contratto di licenza di SQL Server 2005 per la ridistribuzione dei componenti di SQL Server 2005.

Vedere anche

Concetti

Considerazioni sulla protezione per Notification Services
Configurazione degli account di Windows per un'istanza di Notification Services
Configurazione delle autorizzazioni di SQL Server per un'istanza di Notification Services

Altre risorse

Distribuzione di Notification Services

Guida in linea e informazioni

Assistenza su SQL Server 2005