Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Stateless/Stateful-Kommunikation  Dokument im Navigationsbaum lokalisieren

Verwendung

Das Internet Communication Framework unterstützt in der Serverrolle sowohl Stateless- als auch Stateful-Kommunikation. Bei einer Stateful-Kommunikation werden innerhalb einer Session alle Benutzeraktivitäten – wie eine „normale" SAP-Transaktion – in einem einzigen Kontext (Rollbereich) ausgeführt.

Die Verwendung einer Stateful-Kommunikation ist immer dann sinnvoll, wenn Daten und Aktivitäten eines Benutzers über die gesamte Ausführungsdauer einer Session erhalten bleiben sollen.

Für das ICF bedeutet dies, dass die Lebenszeit eines speziellen HTTP Request-Handlers über einen einzelnen Request hinaus erhalten bleibt.

Die Defaulteinstellung ist der Stateless-Modus, d.h., das Attribut STATEFULdes Server-Kontrollblocks hat den Wert CO_DISABLED (vgl. IF_HTTP_SERVER).

Voraussetzungen

·        Sie haben genau abgewägt, ob Sie Stateful arbeiten müssen, da dies den Server weitaus mehr belastet und sich negativ auf die Performance auswirkt.

·        Es wird sichergestellt, dass nach Ende einer Stateful-Kommunikation der Kontext in einem Stateless-Zustand umgesetzt wird. Ansonsten würde die Stateful-Sitzung nach dem Abbau der Verbindung so lange aktiv bleiben bis Auto-Logout nach Ablauf des Session-Timeout die Sitzung automatisch beendet und Performance-Verlusten des Applikationsservers führen.

Funktionsumfang

Wenn Sie Statefularbeiten, sollten Sie folgende Punkte beachten:

·        Für eine einzelne Session (begrenzt durch die Lebenszeit des korrespondierenden Benutzerkontextes) kann in einer Folge von Requests mehr als ein HTTP Request-Handler beteiligt sein.

·        Es existiert niemals mehr als eine Instanz eines speziellen HTTP Request-Handlers zu jedem beliebigen Zeitpunkt innerhalb einer einzelnen Session. Das heißt, dass eine entsprechende HTTP Request-Handler-Instanz bei sequentiellen Requests entweder erneut genutzt wird (Default), oder für jeden einzelnen Request re-instantiiert wird (auf Wunsch durch den HTTP Request-Handler selbst).

·        Die Wiederverwendung der HTTP Request-Handler-Instanz ist nur möglich, wenn die gleiche URL wie beim letzten Request verwendet wird. Wird durch eine andere URL zu dem gleichen Request-Handler gesprungen, so wird das Objekt re-instantiiert.

·        Da HTTP-Requests durch ihr Design unabhängig voneinander sind und keine inhärente Unterstützung für Session-Kontexte liefern, muss solch ein Kontext künstlich konstruiert werden.

Aktivitäten

Sie haben zwei Möglichkeiten, eine Stateful-Kommunikation zu definieren:

       1.      Sie verwenden die Methode set_session_stateful. In diesem Fall benötigen Sie Cookies um einen Session-Kontext halten können.

Diese Grafik wird im zugehörigen Text erklärt

Die Methode set_session_stateful setzt entsprechend ein Cookie, falls dies benötigt wird, und noch kein Cookie gesetzt wurde. Dieses Cookie muss vom Client mit dem nächsten Request an den Server zurückgesendet werden, um den Session-Kontext zu identifizieren.

       2.      Sie verwenden die Methode set_session_stateful_via_url. In diesem Fall benötigen Sie keine Cookies, da die Kontext-Informationen in der URL eines Requests enthalten sind.

Beispiel

Das folgende Beispiel beschreibt, wie Sie eine Stateful Kommunikation aufbauen können. In diesem Beispiel wird das reservierte Formfeld Stateful vom Request an den HTTP Request-Handler übergeben. Ist die Ausprägung = 1, dann soll eine Stateful Kommunikation aufgebaut werden, ansonsten bleibt die Kommunikation Stateless.

 

* Stateful/Stateless

  DATA: stateful TYPE string.

  stateful = server->request->get_form_field( 'stateful' ).

 

  IF NOT stateful IS INITIAL.

    IF stateful = 0.

      CALL METHOD server->set_session_stateful

        EXPORTING

          stateful = if_http_server=>co_disabled

          path     = ''.

    ELSEIF stateful = '1'.

      CALL METHOD server->set_session_stateful

        EXPORTING

          stateful = if_http_server=>co_enabled

          path     = ''.

    ENDIF.

 

Weitere Informationen

Detaillierte Informationen zur Verwendung der Stateless/Stateful-Kommunikation mit BSPs erhalten Sie unter:

·        Stateful BSP-Applikationen

·        Stateless BSP-Applikationen

·        Stateful oder stateless programmieren?

Diese Grafik wird im zugehörigen Text erklärt

Der ICF-Service Example_1 (default_host/sap/bc/icf/demo/example_1) zeigt, wie sich das Verhalten von Stateless- und Stateful-Kommunikation auswirkt. Zu diesem Zweck wurde in dem Beispiel ein Zähler angelegt.

Wenn Sie den Request in einer Stateless-Kommunikation ausführen, bleibt der Zähler auf 1, bei einer Stateful-Kommunikation wird der Zähler entsprechend der Anzahl der Aufrufe weiter erhöht.

 

 

Ende des Inhaltsbereichs