Announcement

Collapse
No announcement yet.

Anzeige Aktualisierung bei allen Clients

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

  • Anzeige Aktualisierung bei allen Clients

    Hallo!

    Ich habe mit DOT.Net eine Terminverwaltung programmiert, als DB dient eine MS Access.mdb.
    Es greifen 2-3 Clients parallel darauf zu.
    Wenn ein Client einen Termin einfügt, sollen die Anderen ebenfalls diesen neuen Termin sehen.

    Wie würdet Ihr das realisieren?
    - Gibt es ein Auto-Refresh (ODBC) ?
    - Eine WCF-Lösung?



    Danke für eure Ideen

  • #2
    Hallo,

    nimm nicht Access, das ist nicht unbedingt für mehrere Benutzer tauglich. Wenn du .net verwendest bietet sich z.B. SQL Server Compact an.
    Verwende außerdem nicht ODBC, das ist einfach nur noch alt. Nimm besser etwas das auf ADO.net basiert - am elegantesten nimmst du gleich das EntityFramework.

    Ich gehe von einer Desktopanwendung aus, also keine Webanwendung.

    Einen Auto-Refresh gibt es so nicht. Die einfachste Lösung wäre wenn die Clients per Timer periodisch die Termine neu laden.

    Wenn du keine Poll-Variante (Timer) sondern eine Push-Variante bevorzugst, so musst du einen Ereignismechanismus einbauen. Eine Möglichkeit wäre in der Tat mittels WCF. Dazu dürfen die Clients nicht direkt auf die DB zugreifen, sondern sie melden sich am WCF-Service an und führen alle Operationen, die an die DB gehen sollten, über diesen Service durch. Wenn nun der Service einen Termin in der DB ändert, so kann er die Clients per Callback über eine Änderung informieren - also eine Art Ereignis feuern. In diesem Informationsvorgang kannst du auch gleich den geänderten Termin übergeben, so dass die Clients einfach ihre "Anzeige" aktualisieren können. Wenn du Datenbindung verwendest, so brauchst du nur in der ObserableCollection<T> den alten Termin entfernen und den neuen einfügen und gut ist es.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Gibt es zwischen deinen Client und der Datenbank noch einen Server? Ohne entsprechenden Prozess wird es schwierig irgendeine vernünftige Lösung zu empfehlen.

      Ohne Serverprozess und wenn die Client alle im selben Netz stecken dann könnte der terminändernde Prozess ein Signal per UDP broadcasten auf das alle Clients lauschen und dann gegebenenfalls ein Refresh auslösen.

      Comment


      • #4
        Ich könnte noch die Message Queue Lösung in den Raum werfen mit z.B. RabbidMQ, aber das ist wohl für so eine Software fast etwas zu überdimensioniert. Falls Du aber öfters Push Szenarien würde ich darüber nachdenken. Vielleicht auch mal CQRS (Command Query Responsibility Segregation) als Basis googlen.

        Comment


        • #5
          Hallo!

          Besten Dank für eure Lösungsansätze.
          Die MS Access.mdb ist vorgegeben, da es sich um eine Ablöse handelt und die DB beibehalten werden muss.
          Ich werde natürlich mittels ADO.NET und OLEDB auf die DB binden.

          Jetzt muss ich noch entscheiden ob ein PULL- oder PUSH-Szenario in Frage kommt, insgesamt handelt es sich um eine kleinere Lösung.
          Alle Clients liegen IP-mäßig im selben Netzwerk.
          Einen eigenen WCF-Service zu installieren ist vielleicht überdimensoniert, aber sicherlich die professionellste Lösung.
          Ein Polling mit Timer würde wahrscheinlich ausreichen.
          Ein Broadcasting mittels UDP ist auch ein Ansatz.
          Die Messaging Queue ist fast zu überdimensoniert.

          Also nochmals Danke für die Ansätze.
          LG.
          wolfchr3

          Comment

          Working...
          X