| |

VB.NET - FortgeschritteneWie PingPong-Effekt unterbinden? | |  | Autor: GambaJo | Datum: 16.03.11 09:09 |
| Hallo erst Mal.
Ich bräuchte eine Idee, wie ich ein Problem lösen könnte, denn derzeit drehe ich mich im Kreis und komme da nicht raus.
Ich habe eine Schnittstelle für Exchange Web Services (EWS) geschrieben, welche auch so weit ganz gut funktioniert.
Es gibt eine Datenbankapplikation, die unter anderem auch Termine verwaltet. Wird so ein Termin erstellt, geändert oder gelöscht, wird diese Änderung auch an den Exchange Server übertragen, so dass auf beiden Systemen die gleichen Daten vorliegen.
Für den Weg rückwärts (also von Exchange zu der Datenbankapplikation) habe ich einen Windows Dienst geschrieben, der per Push-Notifikationen Änderungen an Terminen direkt in die Datenbank der Datenbankapplikation überträgt. Es läuft also so ab, dass wenn auf dem Exchange-Server bzw. in Outlook ein Termin erstellt/geändert oder gelöscht wird, der Exchange-Server den Windows-Dienst über diese Änderung informiert. Der Dienst holt sich die Änderung und überträgt sie in die Datenbank der Datenbankapplikation.
Das funktioniert auch alles so weit schon.
Das Problem ist jetzt, dass der Dienst Ping Pong mit den Terminen spielt. Folgende Situation:
Ein neuer Termin wird in der Datenbankapplikation erstellt und zum Exchange-Server übertragen. Der Exchange-Server meldet dem Dienst, dass ein neuer Termin erstellt wurde, woraufhin der Dienst diesen Termin versucht wieder in die Datenbank zu übertragen.
Das Problem habe ich unterbunden, indem ich prüfe, ob der Termin schon in der Datenbank vorliegt. Dummerweise sendet Exchange aber nicht nur, dass der Termin erstellt wurde, sondern direkt hinterher auch Meldungen, dass der Termin aktualisiert wurde (auch wenn sich nichts geändert hat). Das konnte ich auch noch abfangen, indem ich die Erstellzeit und die Zeit der letzten Änderung des Termins prüfe. Sind beide gleich, liegt keine Änderung vor.
Wird ein bestehender Termin in der Applikation einfach nur geändert (z.B. ein anderer Ort), wird die Änderung zum Exchange übertragen. Daraufhin meldet der Exchange Server dem Dienst wieder die Änderung, woraufhin der Dienst den Termin wieder in der Anwendung aktualisiert.
Um das Problem zu lösen, habe ich schon ein paar Lösungsansätze ausprobiert.
Ich habe versucht den Termin, der von Exchange kommt, mit dem Termin, der in der Datenbank vorliegt, zu vergleichen, um zu prüfen, ob sich etwas geändert hat. Das funktioniert aber leider nicht, da Exchange den HTML-Body immer verwurstelt. Das heißt, es liegt eigentlich immer eine Änderung vor, wenn auch keine relevante.
Dann habe ich in die Termine auf Exchange eine zusätzliche Eigenschaft eingebaut. Sie wird gesetzt, wenn der Termin von der Applikation nach Exchange übertragen wird. Wenn dann Exchange die Änderung zum Dienst sendet, weiß der Dient, dass keine Änderung vorliegt, und setzt diese Eigenschaft in diesem Termin auf Exchange zurück. Nur leider sendet der Exchange-Server für das Zurücksetzen wieder eine Änderung, und bei der kann der Dienst dann nicht mehr unterschieden, ob es eine richtige Änderung ist, da die Eigenschaft ja zurück gesetzt wurde. Das Schlimme dabei ist, dass Exchange teilweise mehrere von diesen Änderungsmitteilungen auf ein Mal sendet.
Hat jemand eine Idee, wie ich das unterbinden kann? |  |
 Wie PingPong-Effekt unterbinden? | 953 | GambaJo | 16.03.11 09:09 |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|