Inhaltsverzeichnis

WEBA Bausteine

Für Webanwendungen gibt es spezielle Anforderungen, die berücksichtigt werden müssen. Für jeden Client wird eine Session gestartet, in dem ein- oder mehrmals ein Request angefordert wird. Für die Verarbeitung eines Request steht auf dem Webserver aber nur eine begrenzte Anzahl Ressourcen (Prozesse, Threads bzw. Zum Wörterbuch hinzufügen) zur Verfügung, die von dem Internet Information Server (IIS) für die unterschiedlichen Requests wiederverwendet werden. Dadurch können einzelne Requests innerhalb einer Session in unterschiedlichen AppDomains, Prozessen oder sogar auf unterschiedlichen Rechnern ausgeführt werden.

Außerdem werden je nach Programmiermodell (ASP.NET WebForms, MVC, …) für die Implementierung bestimmte Basisklassen vorausgesetzt, welche sich um die Aufbereitung des Ergebnisses (i.e. rendering) kümmern. An hiervon abgeleiteten Klassen müssen dann bestimmte Methoden implementiert bzw. übersteuert werden, welche von IIS für den jeweiligen Request aufgerufen werden.

Deswegen wird für WEBA Bausteine keine Methode RunImplementation erzeugt, welche für die Implementierung übersteuert werden muss. Statt dessen wird in der Basisklasse eine statische Methode GetSessionInstance erzeugt, welche verwendet werden kann, um die Instanz während der Verarbeitung eines Requests zu liefern:

namespace WebApp
{
    public class MySessionModule: HL.Modules.Weba.Twonly.HlWebaTest
    {
...
        public static MySessionModule Instance => GetSessionInstance<MySessionModule>();
...
Für Bausteine vom Typ WEBA gelten die gleichen Regeln für die Implementierungsspezifikation, allerdings muss als Implementierungstyp ASPCLR eingetragen werden.

Web.config

Dieser Abschnitt gilt nur für ASP.NET (e.g. .NET Framework). Für ASP.NET Core (e.g. .NET 6.0 und später) siehe den Abschnitt Extension Methoden

Damit die Infrastruktur in der Lage ist, die richtige Instanz zu erzeugen und für die Verarbeitung eines Requests zur Verfügung zu stellen, muss die Implementierungsklasse in der Web.config als sog. HTTP Module eingetragen werden. Je nachdem, ob die Web-Anwendung im sog. Classic Mode oder Intergrated Mode läuft, muss der Eintrag an unterschiedlichen Stellen erfolgen:

Classic.xml
  <system.web>
    <httpModules>
      <add type="WebApp.MySessionModule" name="HlWebaTestSessionModule" />
    </httpModules>
  </system.web>
Intergrated.xml
  <system.webServer>
    <modules>
      <add type="WebApp.MySessionModule" name="HlWebaTestSessionModule" />
    </modules>
  </system.webServer>
Wenn das TAA Support Package für Visual Studio installiert ist, wird dieser Eintrag in der Web.config automatisch vorgenommen, und ggf. bei Änderungen auch angepasst.

Implementierung

Die Infrastruktur legt beim jedem Request eine Instanz dieser Implementierungsklasse an. Wenn der Request beendet wird, werden die Daten (z.B. Objekteinhalte) für die Instanz gesichert und beim nächsten Request verwendet, um die neue Instanz zu initialisieren. Bevor ASP.NET dann die für Implementierung des Requests ermittelte Methode auslöst, wird die Methode BeginRequest an der Instanz der Implementierungsklasse ausgelöst. Nachdem ASP.NET die Kontrolle zurückbekommt, und bevor die Daten gesichert werden, wird die Methode EndRequest an der Instanz der Implementierungsklasse ausgelöst. Diese beiden Methoden können ggf. übersteuert werden, um entsprechend reagieren zu können.

Da es sich bei Bausteinen vom Typ WEBA um Einstiegsbausteine handelt, können hier auch die Eigenschaften und Methoden, welche hier beschrieben sind, verwendet werden. Zusätzlich stehen die nachfolgend beschriebenen Eigenschaften und Methoden zur Verfügung.

Eigenschaften

protected Boolean IsReentry { get; }

Liefert false für die 1. Anforderung in einer Sitzung, true für alle nachfolgenden.

Methoden

public void RestartSession(HttpContext httpContext)

Diese Methode kann verwendet werden1), um die aktuelle SessionModule-Instanz neu zu initialisieren, um z.B. geänderte Eigenschaften zu berücksichtigen. Die aktuelle HttpContext-Instanz muss explizit übergeben werden.

Für ASP.NET Core steht die Eigenschaft HttpContext.Current nicht mehr zur Verfügung. Siehe hier für die unterschiedliche Möglichkeiten, um auf die aktuelle HttpContext Instanz zu zu greifen.

public void RestartSession()

Ruft die Methode RestartSession mit HttpContext.Current auf. Diese Methode kann nur in .NET Framework verwendet werden.

Extension Methoden

Dieser Abschnitt ist in Bearbeitung, und kann ggf. noch angepasst werden.

Für die Integration von HTTP Module und HTTP Handler unter ASP.NET Core spielt die Web.config keine Rolle mehr, sondern die HTTP Pipeline wird mittels einer Reihe spezieller Extension-Methoden konfiguriert (Details). Für ASP.NET Core gibt es eine Klasse SessionModuleExtensions2), in der Extension-Methoden für die Integration eines TAA SessionModule in die Middleware definiert sind. Diese Methoden können da verwendet werden wo Session State konfiguriert wird.

public static IServiceCollection AddSessionModule<T>(this IServiceCollection services, Action<SessionOptions> configure = null)
	where T : SessionModule

Fügt Dienste hinzu, die für die TAA SessionModule-Unterstützung benötigt werden. Dazu gehören auch die Dienste, die für den Anwendungssitzungszustand erforderlich sind. Diese Methode kann anstatt SessionServiceCollectionExtensions.AddSession(IServiceCollection) verwendet werden.

public static IApplicationBuilder UseSessionModule<T>(this IApplicationBuilder builder, SessionOptions options = null)
	where T : SessionModule

Fügt der Anforderungspipeline der Anwendung die TAA SessionModule-Middleware hinzu. Dazu gehört auch die Middleware, die für den Anwendungssitzungszustand erforderlich ist. Diese Methode kann anstatt SessionMiddlewareExtensions.UseSession(IApplicationBuilder) verwendet werden.

1) , 2)
R10.01