Hallo Mike.
Mike Lowrey hat geschrieben:Vielleicht kannst du ja jetzt schon eine Schnittstelle berücksichtigen über die das AddIn ebenfalls Daten empfangen kann, dass würde eine einfachere Integration eines Service begünstigen ....
lol.
So funktioniert das aber nicht.
Das Addin empfägt keine Daten, sondern liest diese aus.
Bei der Service/Addin-Variante der "alten" Version, diente der Service als Datenschreiber und das Addin als Reader.
Soweit kein Problem.
Da der Service aber nichts von den Tätigkeiten des Addins weiß, kann es eben zu Problemen kommen.
[Beispiel]
Da man eine Datenbank oder Textdatei (spielt im Prinzip keine Rolle) nicht unendlich mit Daten vollstopfen kann, muss man dafür sorgen, dass in regelmäßigen Abständen alte Daten gelöscht werden.
Dem Addin kann man diese Aufgabe nicht geben, da es nicht permanent läuft.
Also muss der Service diese Funktion übernehmen.
Nun kann es aber vorkommen, dass der Service genau zu der Zeit Daten löscht, auf die das Addin versucht zuzugreifen.
Und schon bekommt man die tollsten Exceptions....
Die ganze Prozedur zeitgesteuert ablaufen zu lassen, ist auch nicht ganz so einfach....
Zum einen hat der User die Möglichkeit das Updatinterval selbst einzustellen, zum anderen kann man nicht exakt vorhersagen, wie lange der Service für seine Arbeit benötigt.
[/Beispiel]
Und von diesen Beipielen gibt es noch einige mehr....
Was passiert, wenn ...
der User das Updateinterval ändert?
einen Clienten hinzufügt?
(noch schlimmer) einen Clienten entfernt?
ein Client herunterfährt?
ein Client abstürzt?
usw...
usf...
etc...
pp...
Vielleicht wird jetzt dem einen oder anderen klar, warum ich für dieses Addin so lange brauche.
Die Funktionen um die Werte zu erhalten, benötigen am wenigsten Zeit.
Sich zu überlegen, wie man o.g. "Sonderfälle" abfängt ohne das dabei die Anwendung abschmiert, benötigt die meiste Zeit.
Vom Testen mal ganz zu schweigen...
Beim neuen Addin werden die Daten direkt vom Clienten abgerufen.
Sollte dieser nicht rechtzeitig antworten, wird dieser entweder als "offline" markiert oder der Wert auf 0 bzw. "n/a" gesetzt.
Diese Werte werden dann in Variablen bzw. Arrays abgelegt und stehen dann für die weitere Verarbeitung zur Verfügung.
Das Löschen alter Daten kann man dann ohne Probleme vornehmen, da man ja weiß wann das Addin auf die Daten zugreift.
Mike Lowrey hat geschrieben:.... das AddIn könnte so explizit von denen die einen Service brauchen erweitert werden und trotzdem wäre die Installation für die Laien simpel.
Da die Funktionsweise der beiden Variaten zu unterschiedlich ist, wäre es für mich einfacher 2 Versionen zu erstellen.
Aber erstmal muss ich dafür die Probleme mit dem Service beseitigen.
Und solange wird erstmal an der "light-Version" gearbeitet...
Gruß
sTunTe