Announcement

Collapse
No announcement yet.

Verständnisfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verständnisfrage

    Leider habe ich noch sehr wenig Erfahrung mit der Programmierung von C# und ASP.NET-Anwendungen, daher folgende Verständnisfrage:

    In einer externen DLL habe ich eine Klasse erstellt, der aus einer ASP.NET-Anwendung heraus Daten über Eingabefelder übergeben werden. Anschließend wird die in der DLL mit "public static void Auswerten()" deklarierte Auswertefunktion aufgerufen. Diese schreibt dann die Ergebnisse in statische Variablen der DLL.

    Die Anwendung funktioniert soweit prima.
    Nun meine Frage:

    Ist dieses Vorgehen auch ok, wenn mehrere Anwender die ASP.NET-Anwendung gleichzeitig aufrufen, oder muss hier in der ASP.NET-Anwendung mit dem new-Befehl eine neue Instanz der Auswerte-Klasse erstellt werden.

    Vielen Dank
    Reinhold

  • #2
    Hallo,
    eine Web-Anwendung ist aufgrund des HTTP-Protokolls pinzipiell zustandslos. Wenn ein Browser eine Webseite zum zweiten Mal aufruft und dabei mit den Daten des vorherigen Aufrufs weiterarbeiten will, muss die Web-Anwendung eine Session-Verwaltung implementieren. ASP.NET erleichtert dies, das es vorbereitete Alternativen einsatzfertig zur Verfügung stellt (Application, Cache, Session State, Cookies, ViewState). Welche dieser Alternativen im Einzelfall die richtige ist, hängt davon ab, welche Datenmenge in Abhängigkeit von der höchsten gleichzeitigen Benutzeranzahl gespeichert werden muss.
    <br>
    Der IIS 5 führt eine ASP.NET im Arbeitsprozess aspnet_wp.exe aus, wobei automatisch ein Thread-Pool dazwischengeschaltet wird. Somit muss die Anwendung damit rechnen, dass bei jedem Aufruf ein anderer Thread im gleichen Prozess ausgeführt wird

    Comment


    • #3
      Hallo Herr Kosch,
      <br>
      vielen Dank für die schnelle Antwort.<br>
      Den Inhalt Ihres Postings habe ich im Wesentlichen schon mal irgendwo gelesen, wahrscheinlich aber auch noch nicht hundertprozentig erfasst. Um letzte Sicherheit zu erhalten, formuliere ich meine Frage neu:
      <br>Besteht die Gefahr, dass sich zwei unterschiedliche ASP.NET-Anwender (Browser) bei gleichzeitigem Arbeiten mit der ASP.NET-Seite (sessionState mode="InProc") die in den Feldern der statischen Klasse (externe DLL im bin-Verzeichnis) eingestellten Daten gegenseitig überschreiben, wenn für diese Klasse (mit dem new-Befehl) keine neue Instanz in der ASP.NET-Seite erstellt wird?
      <br>
      Oder noch einmal anders:
      Wird die externe Klasse (DLL) von jeder ASP.NET-Session in einen separaten (geschützten) Speicherbereich geladen oder greifen Anwendungen, die eine als statisch deklarierte Klasse aus einer externen DLL aufrufen, immer auf den gleichen Speicherbereich (den der DLL) zu?
      <br>
      Gruß
      Reinhol

      Comment


      • #4
        Hallo,
        wenn die Assembly in den Adressraum von <i>aspnet_wp.exe</i> (Arbeitsprozess von ASP.NET) geladen wird, ist die statische Klasse für alle Nutzer dieses Prozesses sichtbar. Da mehrere Nutzer nacheinander über den gleichen Thread aus dem Thread-Pool auf den Arbeitsprozess zugreifen können, besteht in der Tat die Kollisionsgefahr. Mein Bezug in der vorherigen Antwort auf die vorgefertigen Sachen bezog sich darauf, dass es sinnvoller ist, die vorhandene Infrastruktur zu nutzen als selbst eine zu schreiben :-)
        &#10

        Comment

        Working...
        X