Sie sind auf Seite 1von 37

Jörg Neumann, Resco/Thinktecture

Bin dann mal weg…


Entwicklung von Offline-Clients

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
ACANDO GROUP

Jörg Neumann
Principal bei der Resco GmbH in Hamburg
Associate bei Thinktecture
Beratung, Schulung, Coaching
Buchautor, Referent
Schwerpunkte:
SQL Server
Client-Technologien
Mail: Joerg.Neumann@Resco.de
Blog: WWW.HeadWriteLine.BlogSpot.com
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com 2
Agenda
Herausforderungen
SQL Server Compact Edition
Sync Framework
Ausblick

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Herausforderungen
SQL Server Compact Edition
Sync Framework
Ausblick

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Herausforderungen
Anwendung soll Online & Offline arbeiten
Lokale Datenspeicherung
Automatische Synchronisation
Konfliktlösung
Transparenter Datenzugriff
Automatische Online/Offline-Erkennung

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Lösungsansatz
Lokale Datenspeicherung
SQL Server Compact Edition
Automatische Synchronisation
Synchronization Services for ADO.NET
Transparenter Datenzugriff
DbProviderFactory-Klasse
Online/Offline-Erkennung
NetworkInterface-Klasse

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Herausforderungen
SQL Server Compact Edition
Sync Framework
Ausblick

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
SQL Server Compact Edition
Nachfolger der Mobile Edition
Vormals „Everywhere Edition“
Kostenloser Download
Version 3.5 kommt mit Visual Studio 2008
Für Devices und Desktop
Synchronisation
Läuft im Prozess der Anwendung
Leichtes Deployment
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Einsatzgebiete
Mobile Applications
Runtime und Datenbanken sind sehr schlank
Offline-fähige Clients
Leichte Synchronisation möglich
Single-User-Applications
Lokaler Datenspeicher
Online-Clients
Lokaler Cache

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Funktionsumfang
Bis zu 4 GB pro Datenbank
Eine Datei pro Datenbank (*.sdf)
Sicherheit durch Passwort und
Verschlüsselung
Query Engine des SQL Servers
Zugriff über ADO.NET-Provider oder OleDb
Transaktionen werden unterstützt

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Einschränkungen
Keine Netzwerkfunktionalität
Kein Locking
IIS & ASP.NET werden nicht unterstützt
Keine Views, Prozeduren, Funktionen,
usw.

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Deployment
Runtime ca. 1,5 MB (8 DLLs)
XCopy-Deployment/ClickOnce/CAB-File
Keine Admin-Berechtigung notwendig
Unterstützung durch Visual Studio
DLLs im Anwendungsverzeichnis
MSI-Packet
Erfordert Admin-Rechte
Installiert Assemblies im GAC
Unterstützung durch Microsoft Update
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Zugriff auf CE-Datenbanken
System.Data.SqlServerCe
SqlCeConnection
SqlCeDataAdapter
SqlCeDataReader
SqlCeCommand
SqlCeResultSet
Serverseitige Cursor
Unterstützt Data Binding

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Herausforderungen
SQL Server Compact Edition
Sync Framework
Ausblick

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Synchronization Services for
ADO.NET
Framework zur Synchronisation von DBs
Teil des Sync Frameworks
Als Add-On oder über SQL CE 3.5 verfügbar
Läuft ab .NET 2.0
Zur Zeit noch nicht für Mobile Devices
Client-DB: Compact Edition
Server-DB: ADO.NET Data Provider
Datenbankerweiterungen notwendig
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
15
Architektur
Client

Web
ADO.NET Local Services Remote
SyncAgent
Provider Provider

SyncGroup

SQL Server SyncTable SyncAdapter Beliebige


Compact relationale
Edition Datenbank
ADO.NET Synchronization Services

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
16
Synchronisationsmethoden
Snapshot-Download
Alle Daten auf die Clients verteilen
Inkrementeller Download
Datenänderungen auf die Clients verteilen
Upload
Alle Client-Daten auf den Server hochladen
Bidirektional
Kombination aus Download und Upload

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Schema-Änderungen

LastChange
Timestamp

Timestamp
Tombstone

Tombstone

Schduled
Client_ID
Creation

Deletion
LastEdit

Cleanup
Trigger
Methode / DB-Feld

Table
Snapshot Download

Inkrementeller Download

Inkrementeller Upload vom Client

Bidirection

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Deployment
Two-Tier
Client hat eine direkte Verbindung zum Server

ServerSync
SyncAgent
Provider

ClientSync
SyncAdapter
Provider

Client-Seite Server-Seite

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Deployment
N-Tier
Synchronisation über Middle-Tier

Sync ServerSync
SyncAgent WS
Proxy Provider

ClientSync
SyncAdapter
Provider
Client-Seite Server-Seite

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Online-/Offline-Erkennung
Namespace System.Net.NetworkInformation
NetworkChange-Klasse
NetworkAvailabilityChanged-Event
NetworkAddressChanged-Event
Klasse NetworkInterface
GetIsNetworkAvailable()
GetAllNetworkInterfaces()
Achtung: Loopback-Adapter beachten!

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Herausforderungen
SQL Server Compact Edition
Sync Framework
Ausblick

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
SQL Server 2008
Change Data Capture
Automatische Änderungsverfolgung
Keine Trigger/Tombstone Tables nötig
Abfrage von Änderungen über Views
Unterstützung für Konfliktsteuerung
Bidirektionale Synchronisation ohne
Custom Code!

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Ressourcen: SQL Compact
SQL Server Compact Edition
Microsoft-Produktseite
http://www.microsoft.com/sql/compact
Compact Edition Team Blog
Blogs.msdn.com/SqlServerCompact
Blog von Steve Lasker
http://blogs.msdn.com/SteveLasker
Blog vom Smart Client Data Team
http://blogs.msdn.com/smartclientdata
Compact Edition Forum
http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=15
2&SiteID=1

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Ressourcen: Sync Framework
Sync Framework Developer Center
http://msdn2.microsoft.com/en-us/sync/default.aspx
ADO.NET Synchronization Services
Artikel in Dotnetpro 11/2007 von Jörg Neumann &
Matthias Hönig
Blogs
www.SyncGuru.com
blogs.msdn.com/Synchronizer
http://blogs.msdn.com/SteveLasker

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
{ In-depth support and consulting for
software architects and developers }
http://www.thinktecture.com/

joerg.neumann@thinktecture.com
http://HeadWriteLine.BlogSpot.com

28
SQL Server Compact Edition

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Unterstützte Plattformen
Mobile Devices
Windows CE
Windows Mobile
Desktop
Windows XP
Windows Vista
Windows Tablet PC Edition
Server
Windows Server 2003
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Erstellung von Wartung von
Datenbanken
SqlCeEngine
CreateDatabase()
Shrink()
Compact()
Verify()
Repair()

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Datenbankablage
Standardsuchverzeichnis
MSI/XCopy: Ausführungsverzeichnis
ClickOnce: Datenverzeichnis
|DataDirectory|-Makro

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
33

Das Data Directory Makro


Verwendung:
string connectionString = @"|DataDirectory|\DemoDb.sdf";

Explizites Setzen des Data Directory:


static void Main()
{
AppDomain.CurrentDomain.SetData(
"DataDirectory", Application.LocalUserAppDataPath);

Application.Run(new MainForm());
}

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Synchronization Services

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Beteiligte Komponenten I
SyncAgent
Verbindet Client- und Server-DB
SyncTable
Definiert die zu synchronisierenden Tabellen
SyncGroup
Gruppierung mehrere SyncTable

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
35
Beteiligte Komponenten II
LocalProvider
Zugriff auf Clientdatenbank
SqlCeClientSyncProvider ist enthalten
RemoteProvider
Zugriff auf die Serverdatenbank
DbServerSyncProvider ist enthalten
SyncAdapter
Serverseitige Synchronisation der Daten

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
36
Beteiligte Assemblies
Microsoft.Synchronization.Data.dll
SyncAgent, SyncTable, SyncGroup, SyncProvider
Clientseite, bei N-Tier auch auf Serverseite
Microsoft.Synchronization.Data.SqlServerCe.dll
SqlCeClientSyncProvider
Clientseite
Microsoft.Synchronization.Data.Server.dll
DbServerSyncProvider, SyncAdapter
Client- (Two-Tier) oder Serverseite (N-Tier)
System.Data.SqlServerCe.dll
ADO.NET Data Provider

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com