Using Notification Services in SQL Server 2005
In this tutorial you will learn about using notification services in SQL Server 2005, Notification Services Architecture, Building Notification Services Solutions, Using Notification Services, Subscription Management, Syntax for adding subscribers, Syntax for adding a device, Syntax for Adding the Subscriptions.
-
Notification Services Architecture
-
Building Notification Services Solutions
This new feature of SQL Server 2005 is directed towards the delivery of event driven or scheduled notifications to users who have opted to receive such notifications. Developers find this feature extremely useful for developing and deploying applications that require notifications to be sent to users based on subscriptions made by them.
The most significant feature of this service is that information can be scheduled to be sent to the user at timed intervals to their computers or mobile devices in response to the occurrence of a predefined event. The event could be the delay of a flight or the reduction of stock below a specified level.
The notification services model is based on the Subscriber/ subscription scenario with some enhancements in that the response to each subscription can be customized. A subscriber is one who has requested for the notification to be sent to him on a specified device or devices. An event is a trigger that shoots out the notification to the subscriber. A notification is the customized message that is shot out to the subscriber when the predefined event has occurred.
The Architecture
The subscriber and subscription information is stored in the SQL Server 2005 database and are defined by two XML files. The instance configuration file contains the information for the notification services instance—including devices, delivery, delivery protocols and channels. All applications hosted by the instance use this information. The definition of the application permitted to use this information is contained in the application definition file. This file contains data specific to the notification application such as the definition of events, subscriptions and notifications.
All subscription information is stored in the SQL Server 2005 database and a managed code interface helps create a custom subscription management application. Event data is collected by event providers and such data is also stored in the database. An active generator inspects events and matches it with the data in the subscription database. Whenever a match is found a notification is generated and T-SQL queries are used to determine the content of the notification. Thereafter the distributor takes over. It formats the notification and dispatches it to the appropriate subscriber via a specified delivery service. Content formatters(such as Extensible Stylesheet language[xslt]) can also be used to format the notifications if required.
All the above components of the notification service are controlled by Microsoft Windows service called NS$InstanceName. The NET STOP and NET START commands can be used to start or stop the service.
Using Notification Services
Notification services have four APIs for programming the service.
1. Subscription management
2. Event provider
3. Content formatting
4. Delivery protocol
The tables, views and stored procedures within the notification services enable the service perform its functions. The .NET subscription management objects interface is implemented to develop custom applications that create and format the notification.
Subscription Management
Subscription management begins with adding a C# directive for Notification services namespace.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Using Microsoft.SqlServer.NotificationServices;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Thereafter, the developer has to create a subscriber, add a device for receiving the notifications and then add the subscriptions.
Syntax for adding subscribers is as under:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
public void AddSubscriber(String instanceName, String subscriber) ;;;;;;
{ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//create NSInstance object ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NSInstance testInstance=new NSInstance(instanceName); ;;;;;;;;;;;;;;;;;l
//create subscriber object ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Subscriber mySubscriber=new Subscriber(testInstance); ;;;;;;;;;;;;;;;;;l
//Set Subscriber information ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;l
mySubscriber.SubscriberID= subscriberID; ;;;;;;;;;;;;;;;;;l;;;;;;;;;;;;;
//Add the new subscriber record. ;;;;;;;;;;;;;;;;;l;;;;;;;;;;;;;;;;;;;;;
mySubscriber.Add() ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;llllll
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Syntax for adding a device
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
public void AddEmailSubscriberDevice(String instanceName, string ;;;;;;;
subscriberID, String deviceName, String deviceAddress) ;;;;;;;;;;;;;;;;;
{ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//create NSInstance object ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NSInstance sampleInstance= new NSInstance(instanceName); ;;;;;;;;;;;;;;;
//Create SubscriberDevice object ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SubscriberDevice sampleSubscriberDevice=new SubscriberDevice;;;;;;;;;;;;(sampleInstance); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//Set the subscriber device properties ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sampleSubscriberDevice.SubscriberID=subscriberID; ;;;;;;;;;;;;;;;;;;;;;;
sampleSubscriberDevice.DeviceAddress=deviceAddress; ;;;;;;;;;;;;;;;;;;;;
sampleSubscriberDevice.DeliveryChannelName= “EmailChannel”; ;;;;;;;;;;;;
sampleSubscriberDevice.DeviceTypeName= “Email”; ;;;;;;;;;;;;;;;;;;;;;;;;
sampleSubscriberDevice.DeviceName=deviceName; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//Add the subscriber device record to the database ;;;;;;;;;;;;;;;;;;;;;
sampleSubscriberDevice.Add();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Adding the Subscriptions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Private string addSubscription(String instanceName, ;;;;;;;;;;;;;;;;;;;;
StringApplicationName, String SubscriptionClassName, String ;;;;;;;;;;;;
subscriberID, String deviceName, String City) ;;;;;;;;;;;;;;;;;;;;;;;;;;
{ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//Create NSInstance object ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NSInstance sampleInstance=new NSInstance(instanceName); ;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//Create NSApplication object ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NSApplication sampleApplication= new NSApplication(sampleInstance, ;;;;;
applicationName); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//Create subscription object ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Subscription samplesubscription= new Subscription(sampleApplication, ;;;
subscriptionClassName); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sampleApplication.Enabled=true; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
samplesubscription.SubscriberID=subscriberID; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//Subscription data fields—defined in ADF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Samplesubscription[“DeviceName”]=deviceName; ;;;;;;;;;;;;;;;;;;;;;;;;;;;
sampleSubscriptin[“SubscriberLocale”]= “xx”; ;;;;;;;;;;;;;;;;;;;;;;;;;;;
sampleSubcription[“City”] =City; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//set the recurrence of the subscription ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Samplesubscription.ScheduleRecurrence= “FREQ-DAILY”; ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//set the start date and time of the subscription for scheduled ;;;;;;;;
subscriptions only. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
StirngBuilder.AppendFormat(“TZID=20:{0}{1}{2} T080000”, ;;;;;;;;;;;;;;;;
DateTime.Now.Year.ToString(“D4”), ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DateTime.Now.Month.ToString(“D2”), ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Datetime.Now.Day.ToString(“D2”)); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sampleSubscription.SubscriberID=subscriberID; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//Add the subscription to the database ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
string subscriptionID=samplesubscription.Add(); ;;;;;;;;;;;;;;;;;;;;;;;;
Return subscriptionID; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
It must be noted that when a notification service is create two XML files are created. These are used to create the initial content, metadata, the instance configuration file and the application definition file.
Custom components can be created for submitting events, formatting notifications and delivery protocols. Three methods of the interface are used for this purpose: Initialize, FormatContent and Close. As the name suggests the Initialize method initializes the notification. Formatcontent actually formats the content and the Close method closes the process.
Robust applications can be created using notification services and custom objects can be implemented for events, delivery or formatting in managed code. This is the break developers were looking for!