Tipps und Tricks rund um .NET und Visual Studio

ASP.NET SignalR: Pipelinemodule für Querschnittsfunktionen
Kommentare

Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer teilen in der Kolumne „.NETversum“ ihr Expertenwissen rund um .NET-Tools und WPF mit.

Mithilfe von Pipelinemodulen kann der Entwickler Querschnittsfunktionen festlegen, die ASP.NET SignalR zu bestimmten Zeitpunkten unabhängig vom jeweils konsumierten Hub zur Ausführung bringen soll. Um ein Pipelinemodul zu implementieren, leitet der Entwickler von HubPipelineModule ab. Anschließend überschreibt er die Methoden, die SignalR beim Eintreten bestimmter Ereignisse aufruft. Die folgende Auflistung beschreibt diese:

  • OnAfterConnect: Wird aufgerufen, nachdem eine Verbindung mit einem Client aufgebaut wurde
  • OnAfterDisconnect: Wird aufgerufen, nachdem eine Verbindung mit einem Client geschlossen wurde
  • OnAfterIncoming: Wird aufgerufen, nachdem ein Hub Daten empfangen hat
  • OnAfterOutgoing: Wird aufgerufen, nachdem ein Hub Daten gesendet hat
  • OnAfterReconnect: Wird aufgerufen, wenn eine abgebrochene Verbindung erneut aufgebaut wird
  • OnBeforeAuthorizeConnect: Wird aufgerufen, wenn eine Verbindung aufgebaut wird. Hier kann der Entwickler Autorisierungslogiken platzieren
  • OnBeforeConnect: Wird aufgerufen, bevor eine Verbindung mit einem Client aufgebaut wird
  • OnBeforeDisconnect: Wird aufgerufen, bevor eine Verbindung mit einem Client getrennt wird
  • OnBeforeIncoming: Wird aufgerufen, bevor der Hub Daten empfängt
  • OnBeforeOutgoing: Wird aufgerufen, bevor der Hub Daten sendet
  • OnBeforeReconnect: Wird aufgerufen, bevor eine abgebrochene Verbindung wieder aufgebaut wird
  • OnIncomingError: Wird aufgerufen, wenn ein Fehler auftritt

ASP.NET SignalR: so funktionieren Pipelinemodule

Listing 1 zeigt ein Pipelinemodul, das ausgewählte Ereignisse unter Verwendung von Debug.WriteLine protokolliert.

public class LoggingPipelineModule : HubPipelineModule
{
    protected override bool 
       OnBeforeIncoming(IHubIncomingInvokerContext context)
    {
        Debug.WriteLine(
           "[{0}] OnBeforeIncoming: Method {1} on Hub {2}",
           DateTime.Now, 
           context.MethodDescriptor.Name, 
           context.MethodDescriptor.Hub.Name );
            
        return base.OnBeforeIncoming(context);
    }

    protected override bool OnBeforeOutgoing(
                     IHubOutgoingInvokerContext context)
    {
        Debug.WriteLine(
            "[{0}] OnBeforeOutgoing: Method {1} on Hub {2}", 
            DateTime.Now, 
            context.Invocation.Method, 
            context.Invocation.Hub);

        return base.OnBeforeOutgoing(context);
    }
} 

Um ein Pipelinemodul bei ASP.NET SignalR zu registrieren, muss es an die Methode AddModule der statischen Auflistung HubPipeline von GlobalHost übergeben werden:

GlobalHost.HubPipeline.AddModule(new LoggingPipelineModule());

Wie alle programmatischen Konfigurationen erfolgt dieser Aufruf vorzugsweise innerhalb der Methode Application_Start, die sich in der Datei global.asax befindet.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -