Jede Menge Stuff: DotNetNuke / Web Services / NT - Service / Scheduler

Heute Abend habe ich mal mit ein interessantes Thema beschäftigt - Scheduler-Jobs unter DotNetNuke.

DotNetNuke im Core einen eigene Implementierung für Scheduler, allerdings laufen diese Jobs im Prozess er Webanwendung. Dieses bedeutet, dass die einzelnen Jobs nur dann ausgeführt werden können, wenn der Hauptprozess der Webanwendung auch läuft. Darauf kann man sich allerdings nicht wirklich verlassen ...

Aus diesem Grund habe ich eine eigene Architektur entwickelt, bei der man vom Hauptprozess unabhängig ist.

Folgendes Szenario: Ich möchte jeden Abend um Punkt 21 Uhr eine E-Mail an ganz bestimmt User verschicken.

In einem Windows NT-Service habe ich einen Scheduler integriert, der je nach Konfiguration zu einem beliebige Zeitpunkt verschiedene Assemblies ausführen kann. Natürlich hätte man auch den Windows internen Scheduler nehmen können aber so habe bin ich etwas flexibler, was die Konfiguration betrifft.

Wie kommt jetzt dieser Service an Daten von DotNetNuke ran? Nun der Scheduler ruft zu einem ganz bestimmten Zeitpunkt ein Programm auf, dass für den Versand der E-Mail zuständig ist - oder viel mehr das die E-Mails aufbereitet und dann in eine MSMQ schiebt. Die benötigten E-Mailadressen bekommt dieses Programm über einen Web Service der innerhalb der DotNetNuke Webanwendung läuft.
Bei diesem Web Service handelt es sich lediglich um Schnittstelle, die dann wiederum auf eine typische DotNetNuke Assembly zugreift. Damit ist die Grundarchitektur von DotNetNuke nicht verändert wurden.

Der Source Code für den Web Service ist wirklich sehr simple:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Xml ;
using System.Xml.Serialization ;
using Lowfett.Goldmember.WeightProcess.MailNotification.Business ;


namespace Lowfett.Goldmember.WeightProcess.Webservive.MailNotification
{
    /// <summary>
    /// Zusammenfassung für Service1.
    /// </summary>
    public class WSMailNotification : System.Web.Services.WebService
    {
        public WSMailNotification()
        {
            //CODEGEN: Dieser Aufruf ist für den ASP.NET-Webdienst-Designer erforderlich.
            InitializeComponent();
        }

        #region Vom Komponenten-Designer generierter Code

        //....
        #endregion

    
        [WebMethod]
        [System.Xml.Serialization.XmlInclude(typeof(MailNotificationInfo))]        
        public ArrayList GetUserToNotify()
        {
            return new MailNotificationController().GetUserToNotify() ; 
        }

    }
}

Wichtig ist das die Assembly des Web Service im "bin" Verzeichnis von DotNetNuke liegt - die asmx Datei kann in einem beliebigen Unterverzeichnis liegen.

Den Source Code für den NT-Service und den Client des Web Services erspare ich mir an dieser Stelle!

Pingbacks and trackbacks (3)+

Kommentar schreiben