Der service-orientierte Offline Client

In meinen letzten 2 Blogeinträgen habe ich über occasionally connected Clients geschrieben und 2 prinzipielle Lösungsmöglichkeiten für Offline Clients in verteilten Anwendungen vorgestellt. Der erste Lösungsansatz folgte dem Konzept der datennahen Synchronsation von offline Daten und wurde in „Der datenzentrische Offline Client, das Microsoft Sync Framework und ADO.NET Sync Services“ https://blogs.msdn.com/mtcmuc/archive/2008/12/19/der-datenzentrische-offline-client-das-microsoft-sync-framework-und-ado-net-sync-services.aspx vorgestellt.

Heute möchte ich über den service-orientierten Offline Clientansatz schrieben. Dieser Offline Clientansatz ist explizit für verteilte Anwendungsszenarien entworfen, in denen der zentrale Anwendungsserver Serviceschnittstellen(z.B. Web Services) bereitstellt.

Das Lösungsszenario für den service-orientierten Offline Client stellt sich wie folgt dar.

So

Im Gegensatz zu der Darstellung des datenzentrischen Ansatzes fallen einige Unterschiede auf.

Der Client ist beim service-orientierten Ansatz mit weniger Schichten/Subsystemen versehen. Im Gegensatz dazu gibt’s beim datenzentrischen Ansatz einen UI-, BL- und DL Schicht auf dem Client. Damit niegt der datenzentrische Ansatz im schlechtesten Implementierungsfall zu einer komplexen Fat client Anwendung zu werden. Das Problem mit diesen potentiell komplexen Anwendungstyp ist die potentiell komplex Softwareverteilung, die beim einer Offline Anwendung durchaus zu berücksichtigen ist.

Ein weiterer Unterschied ist, dass im service-orientierten Szenario die Serviceschnittstellen des zentralen Anwendungsservers sowohl im Offline- als auch im Online Szenario nutzbar sind. Damit erhöht sich der Grad der Wiederverwendung in der Anwendung. Der Codeanteil sinkt durch Wiederverwendung, mit weniger Code gibt’s weniger Entwicklungsaufwand und Fehlerquellen.

Die Daten und deren Strukturen, die beim service-orientierten Ansatz lokal vorhanden sind, sind deutlich einfacher als im datenzentrischen Szenario

Da der service-orientierte Offline Client kein seltenes Anwendungsszenario ist – genau wie der datenzentrische Offline Client – gibt es auch hier einige technische Grundbausteine, die man für die Implementierung eines services-orientierten Offline Client wieder verwenden kann.

In der „Smart Client Software Factory“ auf Codeplex https://www.codeplex.com/smartclient sind 3 Application Blocks enthalten, mit denen man einen service-orientierten Offline Client implementieren kann. Die 3 Applications Blocks sind Folgende:

  • Endpoint Catalog Application Block
  • Connection Monitor Application Block
  • Disconnected Service Agent Application Block

Mit dem Endpoint Catalog Application Block kann man vielen Netzwerk Endpunkte verwalten.

so1 

Der Application Block “Connection monitor” überwacht die Verfügbarkeit von verschiedenen Netzwerkendpunkten.

so2

Der „Disconnected Service Agent“ Application Block ist der mächtigste der 3 Application Blocks. Mit diesem Application Block kann man Service Schnittstellen auf einem Server aufrufen, auch wenn die Serviceschnittstellen nicht verfügbar sind. Dazu ruft man nicht mehr direkt den zentralen Anwendungsserver auf, sondern übergibt die Servicerequests an dem Service Agent, der den Aufruf und die Ergebnisrückgabe übernimmt. Der Application Block benutzt Funktionalitäten aus dem Endpoint Catalog und dem Connection Monitor.

so3

Die wichtigsten Funktionalitäten werden durch die Klasse „RequestManager“, die Klasse „RequestDispatcher“ und deren Methoden bereitgestellt. Für Serviceschnittstellen basierend auf Webservices (Basic_Profile) und WCF basierte Services gibt es schon entsprechend Proxy Factories.

so4

Viel Spass beim Ausprobieren ... Gunnard