in

DotNetSide

Dot Net South Italy Developers User Group

Articoli

Articoli pubblicati dagli iscritti a .netSide

Tutorial su Notification services - Prima Parte

articolo di Giuseppe Di Cillo 

Introduzione

Durante la programmazione di applicazioni web e non solo, è facile ritrovarsi ad avere la necessità di dover integrare soluzioni per l’invio automatico di email o messaggi SMS, per i più svariati scopi: immaginiamo notifiche di avvenuta registrazione al sito, disponibilità di prodotti o avvisi su offerte durante le aste online. Spesso risulta costoso progettare un sistema per gestire i diversi aspetti coinvolti come, ad esempio, sottoscrizioni agli eventi, invio di email, gestione del multilingua, formattazione dei messaggi, tracciamento degli invii, individuazione dei destinatari, mittenti, e molto altro. Se può risultare costoso progettare tale sistema ancor più costoso è farlo rispettando la sicurezza e la scalabilità. Notification Services fornisce allo sviluppatore un’infrastruttura completa e flessibile per risolvere questo tipo di problematiche ed è disponibile nelle versioni Standard e Enterprise di Sql Server 2005. La versione Enterprise, rispetto alla standard, offre inoltre una maggiore scalabilità.

La struttura

Nella figura 1 è mostrata la tipica struttura di una soluzione basata su Notification Services.

NotifServices
figura 1.

Notification Services viene implementato come un servizio di windows che non viene inizializzato direttamente dal setup di Sql Server, ma sarà registrato manualmente, dal Management Studio come vedremo di seguito durante questo tutorial. Il servizio utilizzerà un suo personale database per contenere i dati generali come ad esempio i dati generali dei sottoscrittori e i rispettivi dispositivi di notifica, oltre ad un ulteriore database per ogni applicazione di notifica che decideremo di realizzare.

Per esempio, se avessimo un’applicazione di e-commerce con un suo database, e volessimo integrare in essa le funzionalità di notifica sfruttando Notification Services, dovremmo creare una istanza di Notification Services e un’applicazione di notifica con un suo database. La nostra applicazione e-commerce potrà interagire con l’applicazione di notifica tramite operazioni t-sql, documenti XML, codice .NET, il buon vecchio COM, oppure verranno usati dei componenti, detti “hosted providers”, che tengono sotto controllo i dati che ci interessano.

La struttura dell’applicazione di notifica è visualizzata nella figura 2. In realtà la vera struttura è molto più complessa, in quanto Notification Services crea diverse tabelle, views, stored procedures, triggers. Sono inoltre stati semplificati i nomi delle tabelle. Ma da un punto di vista logico, per ora, possiamo immaginarla così strutturata.

Not2
figura 2.

Questi, a grandi linee, sono i componenti che formeranno la nostra applicazione di notifica:
• codice .NET o COM per creare delle sottoscrizioni ad eventi
• “providers” che passano, all’applicazione di notifica, i dati degli eventi da notificare
• “generators” che generano le notifiche
• “distributors” che si occupano di inviare le notifiche ai dispositivi dei sottoscrittori

Per comprendere pienamente le varie parti di questa struttura sarà più utile andare ad esaminare, con un esempio pratico, i singoli passi da compiere per realizzare tale applicazione.

Il Tutorial

In questo Tutorial ipotizziamo di voler dare agli utenti di una nostra applicazione di e-commerce, la possibiltà di ricevere una notifica automatica via email, quando le unità in magazzino di uno specifico prodotto, superano una soglia personalizzata.
A questo scopo dovremo definire:
• la nostra istanza di Notification Services
• la struttura dei dati del database dell’applicazione di notifica
• il codice per creare i cosidetti subscribers e le relative subscription
• il codice per innescare gli eventi


Per rendere più semplice possibile il tutorial, invece di integrare il codice direttamente in un’applicazione web, useremo due scripts vb, e per la generazione degli eventi un semplice script sql. Vedrete che sarà più facile di quanto non sembri adesso. Ma andiamo per gradi.

Come dicevamo all’inizio, è necessario prima di tutto definire una istanza di Notification Services e un’applicazione di notifica. Per fare questo dovremo preparare due files XML. Il primo file è chiamato ICF (Instance Configuration File) e definisce l’istanza, mentre il secondo, detto ADF (Application Definition File) definisce l’applicazione di notifica.

Nota: Per poter esaminare i vari files utilizzati in questo articolo, sarà possibile alla fine di questa serie di tutorial fare il download dell'esempio, scompattare direttamente nel disco “C:” il file zip, e aprire la solution nel Sql Server Management Studio.

Creare l’istanza di Notification Services

Per creare l’istanza di Notification Services è necessario preparare un file xml detto ICF (Instance Configuration File) da dare in pasto all’apposito compilatore. Tale istanza è un vero e proprio servizio windows da poter stoppare, avviare, etc. e può gestire più applicazioni di notifica.
In questo file dovremo specificare fondamentalmente:


• il nome e altre impostazioni dell’istanza
• dove si trova il file di definizione dell’applicazione di notifica
• il canale di invio delle notifiche (per esempio un server SMTP)

Andiamo quindi a esaminare, uno per volta, i singoli elementi che formano il file ICF. All’interno del file zip troverete l’intero file xml, chiamato “EsempioICF.xml”.

La struttura del file ICF

<?xml version="1.0" encoding="utf-8" ?>

   <NotificationServicesInstance xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.microsoft.com/MicrosoftNotificationServices/ConfigurationFileSchema">

 

NotificationServicesInstance è l’elemento radice e, praticamente, non lo modificheremo mai.

<ParameterDefaults>

<Parameter>

  <Name>_NomeIstanzaSql_</Name>

  <Value>%COMPUTERNAME%</Value>

</Parameter>

<Parameter>

  <Name>_NomeServerNS_</Name>

  <Value>%COMPUTERNAME%</Value>

</Parameter>

<Parameter>

  <Name>_PercorsoIstanza_</Name>

  <Value>c:\EsempioNS\</Value>

</Parameter>

  </ParameterDefaults>

In questo elemento è un po’ come se andassimo a specificare delle variabili da utilizzare all’interno dei files ICF e ADF. Nell’esempio stiamo creando tre variabili: _NomeIstanzaSql_, _NomeServerNS_ e _PercorsoIstanza_.
_PercorsoIstanza_, nel nostro esempio, contiene un valore stringa fisso “c:\EsempioNS\” mentre alle altre due assegnamo il valore restituito dalla variabile d’ambiente “%COMPUTERNAME%”, che restituisce il nome del computer sul quale implementeremo l’istanza.
Questi valori sono comunque solo dei defaults, in quanto, come vedremo, quando creeremo l’istanza da Management Studio, potremo cambiarne i valori.

<InstanceName>EsempioNS</InstanceName>

Ogni istanza ha naturalmente un nome che lo identifica, e qui, tramite l’elemento InstanceName, lo stiamo definendo.

<SqlServerSystem>%_NomeIstanzaSql_%</SqlServerSystem>

Qui vediamo l’utilizzo di un parametro che abbiamo definito nella sezione parameterdefaults. Il parametro va richiamato tra “%”.

SqlServerSystem indica il nome del server sul quale vogliamo far girare l’istanza di Notification Services.

 

<Applications>

<Application>

  <ApplicationName>AvvisoMagazzino</ApplicationName>

  <BaseDirectoryPath>%_PercorsoIstanza_%</BaseDirectoryPath>

       <ApplicationDefinitionFilePath>

          %_PercorsoIstanza_%\AvvisoMagazzino\AvvisoMagazzinoADF.xml

      </ApplicationDefinitionFilePath>

<Parameters>

<Parameter>

  <Name>_NomeServerApp_</Name>

  <Value>%_NomeServerNS_%</Value>

</Parameter>

<Parameter>

  <Name>_PercorsoApp_</Name>

 <Value>%_PercorsoIstanza_%\AvvisoMagazzino</Value>

</Parameter>

</Parameters>

 </Application>

</Applications>

 

l file icf può contenere un elemento application per ogni applicazione di notifica che deve gestire l’istanza. Qui vengono specificati il nome dell’applicazione di notifica, la cartella dove si troveranno alcuni files specifici dell’applicazione, e nome e percorso del file ADF che conterrà tutti gli altri elementi necessari alla definizione dell’applicazione. Inoltre, tramite la sezione Parameters, il file ICF passa dei valori al file ADF. Più precisamente, il file ADF ha due parametri chiamati _NomeServerApp_ e _PercorsoApp_, ai quali passiamo rispettivamente i valori dei parametri _NomeServerNS_  e _PercorsoIstanza_ del file ICF (quelli che abbiamo definito poco fa nella sezione Parameters Defaults).

 

 

<DeliveryChannels>

<DeliveryChannel>

<DeliveryChannelName>EmailChannel</DeliveryChannelName>

  <ProtocolName>SMTP</ProtocolName>

   <Arguments>

 <Argument>

  <Name>SmtpServer</Name>

  <Value>localhost</Value>

 </Argument>

 <Argument>

  <Name>BodyEncoding</Name>

  <Value>UTF-8</Value>

 </Argument>

  </Arguments>

</DeliveryChannel>

</DeliveryChannels>

 

 

Qui indichiamo il cosidetto delivery channel ovvero l’indirizzo del sistema di invio delle notifiche. Anche qui è possibile eseguire delle personalizzazioni, ma per il momento prendiamo semplicemente questi valori per l’invio di email tramite servizio SMTP. In questo esempio viene usato il servizio SMTP di Windows 2003 Server presente sulla stessa macchina dove si trova Sql Server 2005, e per questo viene specificato “localhost” come valore del parametro SmtpServer, ma, naturalmente, è possibile specificare un qualsiasi server smtp esterno.

Nella seconda parte di questo tutorial che sarà disponibile tra qualche giorno in questa sezione vedremo come definire l’applicazione di notifica.

 

 

 

Only published comments... Mar 11 2007, 10:36 PM by DotNetSide Staff
Filed under:

Comments

 

Blog di Giuseppe Di Cillo said:

Finalmente dopo tanti ritardi, ho terminato il mio articolo su Notification Services. Sicuramente &amp;egrave;

March 13, 2007 8:44 PM
Powered by Community Server (Commercial Edition), by Telligent Systems