Dieser Artikel wurde maschinell übersetzt.

Vorhersage: "Cloudy"

Synchronisierung von Verzweigungsknoten mit SQL Azure, Teil 2: Dienstbasierte Synchronisierung

Joseph Fultz

Dieser Artikel beschreibt eine Vorabversion von der Sync Framework 4.0;alle Informationen sind vorbehalten.

image: Joseph FultzLetzten Monat, ging die allgemeine Architektur und Design für das Synchronisieren von corporate-Datenbanken mit SQL Azure und von dort aus verschiedenen Zielknoten. Ich über die Optimierung durch Filterung und auch mithilfe der geografischen Verteilung gesprochen – oder die beiden Strategien zusammen mit – die gesamte Verteilung und Sammlung Datennetzwerk zu optimieren.

In diesem Monat werde ich ziehen Sie in der Windows-Azure um einen Synchronisierungsdienst und den Fokus auf Host über eine Schnittstelle in der Wolke synchronisiert. Dies wird der Skalierung der Synchronisierungsmechanismus behandeln viele weitere Endknoten durch Direct Datenbanksynchronisierung konnte nicht bearbeitet werden können. Ich verwende den Oktober 2010 Community Technology Preview (CTP)-Version von Microsoft Sync Framework 4.0 (bit.ly/dpyMP8), die über 2.1 in der Januar-Ausgabe verwendet Framework integriert ist.

Ein Synchronisierungsdienst gerade über Version 2.1 und ein gutes Beispiel erstellt werden, und – Exemplarische Vorgehensweise finden Sie unter bit.ly/bibIdl und bit.ly/epyImQ. Allerdings ist es mit der Verfügbarkeit der CTP-Version 4.0 und Internet-orientierte Elemente der Freisetzung, gutes sinnvoll, für die Windows Azure Sync-Dienst zu nutzen. Eine beträchtliche Menge Code muss noch geschrieben werden, um eine funktionierende Lösung zu machen, aber letztendlich wir erhalten einen Synchronisierungsdienst, der von jedem Gerät mit OData genutzt werden konnte.

Auf Internetebene synchronisieren

Ich behandelt einige Ideen letzten Monat zum Skalieren der Direct-Datenbank-Synchronisierung. Jedoch in einigen – Wenn nicht viele – Fällen stehen eine Reihe von Gründen, dass das Skalierung Problem so einfach gelöst ist nicht. Nur einige oberflächliche Überlegungen für Dinge, die mithilfe der oben beschriebenen Ansätze verdeckt werden unter Angabe, kann eine einfache folgende ausdenken:

  1. Aufgrund von der Beziehung der Daten kann nicht problemlos aufgeteilt werden.
  2. Gibt es keine Segmentierung, die sinnvoll sind und geteilten wäre willkürlich, was würde wahrscheinlich zu unvorhergesehenen Hotspots in den verschiedenen Partitionen der Lösung führen.
  3. Die Menge der Daten, die repliziert werden müssten würde Laufwerk, bis die Kosten mehr kostengünstige, wäre er an mehreren Stellen vorhanden sind.
  4. Burst-Zeiten für die Synchronisation;End-of-Day-Verarbeitung für Hunderte oder Tausende von Einzelhandelsfilialen erstellt beispielsweise Konflikte unabhängig von der Partitionierung.

Dies natürlich nicht erschöpfen aller möglichen Gründe, die ein Design nicht gerade auf SQL Azure für die Synchronisierung erfordern würde, aber es ist ein gut genug Liste, um das Thema broach und schauen Sie sich das Problem zu lösen. Als werde Leben in Informatik, ich versuche, über Probleme zu beheben, indem Sie eine Dereferenzierungsschicht einfügen. In diesem Fall wird es sein, eine Dienstschicht, die in einer Web-Rolle in Windows Azure gehostet als Synchronisierungspunkt statt direkte Synchronisierung mit SQL Azure-Instanz verwendet. Ich habe das Zustandsdiagramm Ende vom letzten Monat aktualisiert, indem einen Platzhalter für Sync-Sicherheitsservice, in Windows-Azure, z. B. in einen logischen Entwurf eintrifft Abbildung 1 angezeigt wird.

image: Typical Corporate Architecture

Abbildung 1: typische Corporate Architektur

Erste Schritte

Die Sync Framework 4.0 ist besonders geeignet, um dieses Problem zu lösen. Allerdings ist es erforderlich, dass ich ein wenig mehr Aufwand als das einfache Modell direkt zwischen den Datenbanken zu synchronisieren. Die CTP-Version 4.0 ist im Lieferumfang von ein gutes Beispiel und Anleitung in der Hilfedatei, die Titel "Erstellen ein Sync-Dienstes in Windows-Azure". Ich werde es als Grundlage verwenden, besprechen Sie die Sync-Dienstimplementierung. Der Clientcode ist etwas schwieriger, da in Version 4.0 eine clientseitige Laufzeit-Bibliothek dazu beitragen, aufgrund der Abstraktion erstellt, um die Synchronisierung auf allen Plattformen zu öffnen, die mit OData eingesetzt werden kann, gibt es keine. Allerdings besteht eine Probe in der 4.0 Beispiele für Windows Mobile 6.5, mithilfe von SQL Server CE. Ich habe den Code co-opted benötigt, und es funktioniert mit Standard geändert SQL Server. So starten Sie den Oktober 2010 4.0 CTP einen bestimmten Satz von Objekten zum Ausführen der Synchronisierungsaktivität verwendet und ist es hilfreich, die mit Ihnen vertraut sein. Die Clientanwendung verwendet eine CacheController die für die Kommunikation mit dem Sync-Dienst mithilfe der OData verantwortlich ist. Auf der lokalen Seite der CacheController verwendet ein OfflineSyncProvider, das Daten-Speicher-spezifische ist – und wahrscheinlich pro Ziel-Plattformen – Schnittstelle zwischen der Anwendung und die Daten (siehe Abbildung 2 ). In dieser Implementierung wird auf der Grundlage des Beispiels ist ein StorageHandler-Objekt verwendet, um den lokalen Datenzugriff zu behandeln. Die OfflineSyncProvider ist ein bekannter Typ, der durch das CacheController verwendet wird, aber die StorageHandler ist benutzerdefinierter Code geschrieben, um die Back-End-Speicher-Interaktion zu behandeln. Die OfflineSyncProvider als die Intelligenz über den Datenzugriff Bibliothek und die StorageHandler als den Datenzugriff Bibliothek vorstellen. Insbesondere die CTP-Version 4.0 nur im Lieferumfang eines integrierten CacheController für die isolierte Speicherung in einem Silverlight-Client mir einige Arbeit zu tun, um Standard verwenden verlässt SQL Server. Das Layout der Objekte und Interaktion Grenzen werden auf hoher Ebene in Abbildung 2 dargestellt.

image: Sync Framework 4.0 Client Synchronization Objects

Abbildung 2 Sync Framework 4.0 Client Synchronisierungsobjekte

Entwicklung von Cloud-Sync-Dienstes

Ich sagte mir immer die schlechte Nachricht übermitteln erster und die gute Nachricht letzter. Auf diese Weise, die Unterhaltung – und hoffentlich die Spirituosen mit Beteiligten es – positiv anzumerken ist beendet. Jedoch in diesem Fall werde ich die Reihenfolge der Übermittlung umkehren Hoffnung, die Lösung über die Begründetheit der leichtere Teil verkaufen. Der Großteil der Arbeit wird auf der Clientseite geliefert, aber das Framework bietet eine Menge für die Server-seitige Unterstützung. In einer Design-Sitzung, die ich dazu führen, war ich einmal von einer Person sagte, die verkauft Tod-Care-Dienstleistungen (Dienstleistungen des Bestattungswesens, Plots, coffins usw.), dass Sie nie Kauf ein einzelnes machen würde, wenn Sie konzentriert "Was ist" und dass stattdessen den Fokus, die erforderlich sind, werden Sie auf "Funktion";im Falle von Tod Care war Sorglosigkeit der echten Ware gekauft, keinen Sarg und Loch im Boden. Dies ist der Fall mit dem Sync Framework. Die Sync Framework 2.1 sorgte für viele Dinge für Entwickler, aber es fiel ein wenig knapp über Ziel, wenn es die Service-basierte Synchronisation gesendet wurde. Überhaupt adressieren nicht Fülle an Geräten und Plattformen, die mit den Daten zu synchronisieren, die über eine Internetverbindung-Synchronisierungsdienst zur Verfügung gestellt wird. Mit der – jetzt Erhöhungsprozess bezeichnet – Verbraucherorientierung von IT-, meine Kunden Direktzahlung mit vielen Geräten in die Hände der Menschen auf allen Ebenen des Unternehmens befassen zu müssen. Sync Framework 4.0 CTP-Version ist mit dieser Art von Herausforderung, insbesondere in Bezug auf dem Synchronisieren der Daten mit diesen Geräten beitragen sollen.

Die Serverseite dieser Lösung Einstieg und übergeht, ist recht einfach. Grundsätzlich kommt es auf folgende Schritte aus:

  1. Definieren Sie die Datenbank
  2. Erstellen Sie eine Konfigurationsdatei für ihn
  3. Verwenden Sie die SyncServiceUtil beim Bereitstellen der Datenbank unter Verwendung der Konfigurationsdatei
  4. Verwenden Sie die SyncServiceUtil zum Generieren von Klassen für den Synchronisierungsdienst erforderlich
  5. Erstellen Sie eine Windows Azure-basierten Web-Rolle für den Dienst Host
  6. Bereitstellen

Wenn Sie wie ich sind, beim Lesen dieser Zusammenfassung, Sie denken, "welche Konfigurationsdatei?" Das Schema für die Datei finden Sie in der MSDN Library unter bit.ly/h2FJod. Verwenden, und verweisen auf die ListDB-Datenbank und der zugehörigen Config-Datei dafür, die mit den Beispiele 4.0 ausgeliefert wird, kann eine benutzerdefinierte Konfigurationsdatei zusammengestellt, die eine Datenbank mit minimaler Verwirrung darstellt. Sobald diese Datei vorhanden ist, ist die Erstellung von Windows-Azure-basierte Dienste ein Kinderspiel. Erstens die Zieldatenbank – in diesem Fall die ListDB Beispiele im SDK 4.0 – in Windows-Azure erstellt werden muss. Sobald dies erfolgt ist, kann die neue SyncServiceUtil verwendet werden, beim Bereitstellen der Datenbank mithilfe des Befehls ähnelt:

SyncSvcUtil /mode:provision 
/scopeconfig:listdbconfig.xml

Die wichtigste Information, die in der Konfigurationsdatei festgelegt werden, ist die Verbindung zur Datenbank SQL Azure. Gegen Ende der Config-Datei ist die <TargetDatabase/>-Element, das für die Wolke ordnungsgemäß konfiguriert werden muss:

<Databases>
  <TargetDatabase Name="listdb" DbServer="[URI for the SQL Azure DB 
   Instance]" DbName="listdb" UserName="[username]" Password="[password]" 
   UseIntegratedAuth="false" /> 
</Databases>

Ausführen des Dienstprogramms generiert zwei Dateien: DefaultScopeEntities.cs und DefaultScopeSyncServices.svc. Der "Defaultscope" Teil des Namens aus der Config-Datei stammt, und befindet sich im Element <SyncScope/>:

<SyncScope Name="DefaultScope" IsTemplateScope="true">

Die Datei Entitäten ist ziemlich ähnlich wie beschrieben, aber die Datei DefaultScopeSyncServices.svc ist etwas deutlicher, wie es die partielle Klasse generiert, mit dem ich Service-Aufrufe, und fügen Sie benutzerdefinierten Logik (etwas Neues 4.0). Die Basis-Synchronisationslogik ist alles Teil des Basisobjekts. Abbildung 3 zeigt die DefaultScopeSyncService-Klasse und die verknüpften Entitäten-Klasse als Vorlage für die Vorlage-Klasse SyncService.

image: Object Browser View of SyncServices Generated Code

Abbildung 3 Object Browser-Ansicht des SyncServices generierter Code

Hinweis auf der rechten Seite von Abbildung 3, die gekürzte Liste der Schnittstellen, die ausgesetzt sind, führen Sie die Synchronisation (im Vergleich zu was müsste verfügbar gemacht werden, die direkt mithilfe von Sync Framework 2.1). Ich wollte den Synchronisationsprozess benutzerdefinierten Logik hinzufügen, würde ich einfach öffnen Sie die Datei DefaultScopeSyncServices.svc, wählen Sie den Methode Interceptor und mein Herz Inhalt zu schreiben. Um grundlegende Synchronisierung über die Service-Schnittstelle implementieren, die gerade erst erstellt wurde, muss ich einfach zuordnen Service/Webprojekt mit den Dateien mit einer Web-Rolle, und fügen in der WebRole:OnStart-Methode eine Zeile den Aktivierungskontext zu erstellen:

public override bool OnStart()
{
  DiagnosticMonitor.Start("DiagnosticsConnectionString");
  // For information on handling
  // configuration changes, see the MSDN topic at 
  // go.microsoft.com/fwlink/?LinkId=166357
  RoleEnvironment.Changing += RoleEnvironmentChanging;
  Microsoft.Samples.Synchronization.ActivationContext.
CreateActivationContext();
  return base.OnStart();
}

Ich stellen dann eine Reihe von Änderungen an der Konfiguration um sicherzustellen, dass die Sync Framework-Binärdateien auf CopyAlways gesetzt werden. Um die neuen Annehmlichkeiten sowohl Service-Schnittstelle zu erhalten, sichergestellt, dass 4.0 Microsoft.Synchronization.dll sowohl auf die verwiesen wird und festgelegt werden, ohne das Paket veröffentlicht werden. Ich veröffentlichen Sie auf meine Web-Rolle, und ich bin bereit, um zu wechseln. Ich kann einen einfachen Test machen, indem Sie fordert die Sync-Bereiche, die derzeit verfügbar, sind indem Sie eine Anforderung wie jofultz.cloudapp eingeben. net/defaultscopeSyncService.svc/$syncscopes in meinem Browser. Ich erhalten folgende Antwort, die mir einige vertrauen zuweist, die der Dienst ausgeführt wird:

- <service xml:base="http://rd00155d3a1a55:20000/defaultscopesyncservice.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://www.w3.org/2007/app">
- <workspace>
  <atom:title>SyncScopes</atom:title> 
- <collection href="defaultscope">
  <atom:title>defaultscope</atom:title> 
  </collection>
  </workspace>
  </service>

Ich könnte auch andere Daten anfordern, und falls es Änderungen gibt, werde ich Ihnen als OData standardmäßig. Kann ich möglich dies in einem Browser oder über ein Tool. Verwenden das OData-Viewer-Tool auf CodePlex (dataservicestool.codeplex.com/releases/view/52805), die Anfrage zum Herunterladen von Änderungen ausgeben: jofultz.cloudapp. net/defaultscopeSyncService.svc/DefaultScope/DownloadChanges?userid=BA9152CC-4280-4DAC-B32D-1782E2E8C3D3, was mir die Ergebnissen führt, wie in Abbildung 4.

image: OData Viewer Tool DownloadChanges Result

Abbildung 4 OData Viewer Tool DownloadChanges Ergebnis

Hier die großartige Neuigkeiten ist, dass die Ergänzungen in Sync Framework 4.0 CTP vereinfachte Synchronisierung Schnittstellen mit Ergebnissen in OData ATOM und JSON OData abrufbar bereitstellen. Dies öffnet die Synchronisierung auf andere Plattformen im Hinblick auf die Client und satiniertem von proprietären Datenformaten legacy-Formate werden – und all das zu tun war war ein Dienstprogramm ausführen, konfigurieren ein Projekt und fügen Sie eine Codezeile hinzu.

Implementierung von Client-Synchronisation

Hier ist der Punkt in der Implementierung, in denen die Kopfhörer einschaltet und Multitasking ermöglicht es, den Fokus. Der Cloud-Service war fast eine Frage der Konfiguration, aber das Client-Stück hat einen etwas höheren Arbeitsaufwand, wenn Sie die von Grund auf neu beginnen. Da Sync Framework 4.0 CTP im Lieferumfang ein CacheController für den isolierten Speicher, wenn Silverlight die Zielplattform für den Client ist, wird die Clientimplementierung so einfach wie der Cloud-Service-Implementierung sein. Allerdings Mein Ziel ist ein Windows-Client, der mit SQL Server Standard/Express und das einige Aufwand erfordert. Die SyncServiceUtil weiterhin unterstützt, indem die benötigten Entitäten generieren, hat jedoch einen benutzerdefinierten CacheController und OfflineSyncProvider erstellt werden. Noch wichtiger ist, müssen der Datenspeicher geändert werden, um die Änderungsnachverfolgung zu erleichtern. Dies kann mit einer Datenbank der Version 2.1 bereitgestellt oder eigene benutzerdefinierte Schema für die Änderungsnachverfolgung Möglichkeiten. Diese Implementierung könnte erhebliche Arbeit und die Komplexität der allgemeinen Anwendung im Hinblick auf eine kompliziertere Datenbankimplementierung und komplizierter Codebasis hinzufügen. Es muss allerdings erfolgen, um den Rest des Frameworks zu nutzen. Beschreiben Sie dies für andere, ich erhalten gefragt werden, "Warum nicht einfach tun alles selbst machen?" Die Antwort ist einfach: ich es auf diese Weise verringern den Hauptteil der Arbeit, und öffnen die Implementierung, die Synchronisation durch andere 2.1 und 4.0 Framework Sync Clients/Agenten (einschließlich nicht-Windows-Plattformen).

Betrachten Sie die Segmentierung von Abbildung 5 für nur die Client und Dienst Stück diskutierten dargestellte Arbeit. Sie können sehen, dass über das Framework den Umfang der Arbeit von ungefähr 60 Prozent oder mehr, abhängig von der Zielplattform-Client reduziert..

Abbildung 5 Segmentierung der Arbeit für Client und Dienst-

Arbeitseinheit Aufwand
DB-Schema für Sync (Server) Konfiguration
Dienstimplementierung Generierte + 1 Codezeile
Anpassen der Validierung Hooks synchron Hooks generiert;Nur über zum Schreiben von Mehrwert-Code
DB-Schema für Sync (Client) 2.1 Provisioning oder benutzerdefinierte konnte verwendet werden.
Sync-Implementierung für nicht-Silverlight Benutzerdefiniert
Sync-Client für Silverlight Konfiguration + Generation

Arbeiten mit Mobile 6.5 und SQL CE gibt Beispiel mir eine Beispielimplementierung von was Sie mit der Datenbank tun könnte, um die Client-Synchronisation zu implementieren.Beachten Sie die Felder IsDirty, IsTombstone und Metadaten in Abbildung 6 gesehen.

image: Columns to Support Custom Synchronization Implementation

Abbildung 6 Spalten unterstützt benutzerdefinierte Synchronisation Implementierung

Da ein Schema möchte ich eine Reihe von anderen Faktoren:

  1. Wie oben erwähnt CacheController-Implementierung
    1. Lokalen Speicher-Interaktion
    2. Service-Interaktion
    3. Sync-Konflikt-Handler
    4. Sync-Fehlerhandler
  2. Code zum Generieren und nutzen die OData
  3. Code-Definition für die Entitäten, die synchronisiert werden
  4. OfflineSyncProvider für die lokale SQL Server-Datenbank

Artikel 1 und 2, ich den Code für das Beispiel 6.5 bereitgestellten verwenden (siehe Abbildung 7) und platzieren Sie es in meine eigene CacheController-Projekt ausschließlich aus Code aus dem Beispiel ausgeliehen besteht.

image: Files Used from the 6.5 Sample

Abbildung 7 Dateien verwendet werden, aus der Stichprobe 6.5

Verwendung der SyncServiceUtil zum Generieren der Entitäten mit die gleichen Konfigurationsdatei wie vorher, zusammen mit der "/ Modus: Codegen" und "/ Target: Client" Flags. Dadurch wird eine DefaultScopeEntities.cs-Datei, die eigene clientseitige Objekte generiert. Da ich aus dem Beispiel 6.5 stehlen bin, beim Kopieren von settings.cs, utility.cs, SqlCeOfflineSyncProvider.cs, DataStoreHelper.cs und SqlCeStorageHandler.cs zu einem Windows Forms-Projekt. Meine Programmieraufwand minimiert vornehmen ich in Abbildung 8 dargestellten Änderungen.

Abbildung 8 zu Beispielcodes, die zur Minimierung der Codierung Aufwand vorgenommen Änderungen

Datei / Project Change
DefaultScopeEntities.cs Benennen Sie die Klasse an SqlCeOfflineEntity, um den erwarteten Typnamen in das ausgeliehene Dateien
 

Hinzufügen

[Microsoft.Beispiele.Synchronization.ClientServices.KeyAttribute]

Platzieren Sie in den einzelnen where

[System.ComponentModel.DataAnnotations.KeyAttribute()]

vorhanden ist, wie er innerhalb der CacheController-Implementierung verwendet wird

Mein neues CacheController-Projekt

Ersetzen Sie alle Namespaces mit

Microsoft.Beispiele.Synchronization.ClientServices.Custom-Namespace

SqlCeOfflineSyncProvider.cs

Ersetzen

Verwenden Microsoft.Beispiele.Synchronization.ClientServices;

dieses

Verwenden Microsoft.Beispiele.Synchronization.ClientServices.Custom;

Meine benutzerdefinierte CacheController Implementierung verweisen.

SqlCeStorageHandler.cs Kommentieren Sie alle [Connection].Buchung-Befehle aus der Datei: Arbeiten mit SQL Server erfordert ein wenig andere Implementierung als SQL CE, und dies muss hinzugefügt werden Back ordnungsgemäß zu einer echten Implementierung
DataStoreHelper.cs Ändern der Verbindungszeichenfolge auf meinem lokalen SQL Server-Instanz
Settings.cs Weisen Sie SyncServiceUrl den URI für mein Windows "Azurblau" Sync-Dienst (http://jofultz.cloudapp. net/DefaultScopeSyncService.svc/)
Utility.cs

Ersetzen

Verwenden Microsoft.Beispiele.Synchronization.ClientServices;

dieses

Verwenden Microsoft.Beispiele.Synchronization.ClientServices.Custom;

Meine benutzerdefinierte CacheController Implementierung verweisen.

Durch Nutzung von Beispielcode, und diese Änderungen vorzunehmen, ich kann eine kleine Konsolenanwendung geschrieben, die die Funktion Utility.Sync aufruft, die wiederum die OfflineSyncProvider und CacheController zur Ausführung der Synchronisation instanziiert:

var localProvider = new   
  SqlCeOfflineSyncProvider();
var controller = new CacheController(new 
  Uri(Settings.SyncServiceUrl), Settings.
SyncScope, localProvider);

Also geändert eine möglicherweise bitten, hat, in denen der Code, um Dinge wie Fetch Datensätze aus dem lokalen Speicher? All dies befindet sich in der StorageHandler-Implementierung. Betrachten Sie Abbildung 9 einen Teil zu sehen.

Abbildung 9 Lokaler Speicher von Datenbefehlen

internal class SqlCeStorageHandler : IDisposable
  {
    #region SQL CE Commands
    private const string GET_ALL_PRIORITY = "SELECT [ID], [Name], [_
      MetadataID] FROM [Priority] WHERE [IsTombstone] = 0";
    private const string GET_ALL_STATUS = "SELECT [ID], [Name], [_
      MetadataID] FROM [Status] WHERE [IsTombstone] = 0";
    private const string GET_ALL_TAGS = "SELECT [ID], [Name], [_
      MetadataID] FROM [Tag] WHERE [IsTombstone] = 0";
    private const string GET_ALL_LISTS =
      "SELECT [ID], [Name], [Description], [UserID], [CreatedDate], 
      [IsTombstone], [_MetadataID] FROM [List] WHERE [IsTombstone] = 0";
    private const string GET_ALL_ITEMS =
      "SELECT ID, ListID, UserID, Name, Description, Priority, Status, 
      StartDate, EndDate, IsTombstone, [_MetadataID] FROM [Item] WHERE 
      [IsTombstone]=0 AND [ListID]=@ListID";
    private const string SELECT_ITEM_CHANGES =
      "SELECT ID, ListID, UserID, Name, Description, Priority, Status, 
      StartDate, EndDate, IsTombstone, [_MetadataID] FROM [Item] WHERE 
      IsDirty = 1";
    private const string SELECT_LIST_CHANGES =
      "SELECT ID, Name, Description, UserID, CreatedDate, IsTombstone, 
      [_MetadataID] FROM [List] WHERE IsDirty = 1";
    private const string SELECT_TAGITEMMAPPING_CHANGES =
      "SELECT TagID, ItemID, UserID, IsTombstone, [_MetadataID] FROM 
      [TagItemMapping] WHERE IsDirty = 1";

Auf diese Weise funktioniert die forward Kette von Operationen wie folgt:

  1. Clientanwendung ruft willkürlichen Sync-Funktion
  2. Sync-Funktion
    1. OfflineSyncProvider instanziiert
    2. CacheController (diese ist benutzerdefinierte), übergeben den Dienst-URI instanziiert und die OfflineSyncProvider
    3. Zum Schluss ruft CacheController.Refresh()
  3. CacheController erstellt eine CacheRequestHandler, die die Kommunikation mit dem Sync-Dienst in Windows-Azure behandelt
  4. CachController fragt das OfflineSyncProvider für die lokale Differenzmenge
  5. Die OfflineSyncProvider verwendet die StorageHandler zum Abrufen von Änderungen aus der lokalen SQL Server
  6. CacheController, die die Differenzmenge verwendet, um eine Anforderung erstellen und übergeben es an die CacheRequestHandler
  7. Die CacheRequestHandler geeignete Formatierungsprogramm (hier OData ATOM) verwendet, um eine ordnungsgemäße Anforderung zu erstellen und sendet Sie an den Sync-Dienst-URI

Alle entpacken und Abrufen der Daten zurück an dem Client ziemlich viel ist natürlich genauso Stuff in umgekehrter Reihenfolge. Abbildung 4 zeigt das OData-Paket während der Übertragung vom Dienst zurück.

Schlussbemerkung

Natürlich durch Entfernen der Transaktionsunterstützung und Schützen von Misnomers wie z. B. SqlCe [Suffix] für Objekte ist nicht die beste Wahl für real-Implementierung, aber es seinen Zweck hier bedient, erhalten Sie eine Clientversion arbeiten, ohne neuen Code zu schreiben. Jede Person, die eine SQL Server-CacheController konnte problemlos starten mit die 6.5-Beispiel und Umgestalten und umbenennen, mit den wichtigsten arbeiten, kommen in den Befehlen innerhalb des StorageHandler an, die speziell für Ihre Daten müssten speichern.

Mein Hauptziel war eine Synchronisation dienstbasierte Architektur zu demonstrieren. Ich vernachlässigt absichtlich Zwischenspeichern und andere Optimierungen für Skalierung erfolgen müsste, aber, die in der Regel gut verstanden. Außerdem wollte ich vermitteln, was es ist, was nicht und was möglich ist, während den Leser mit dem Sync Framework 4.0 CTP vertraut zu machen. Ich hoffe, dass ich diese Dinge erreicht haben.

Mit dem SQL Azure Data Sync CTP-Version 2 aktiviert, es wird das Versprechen, dass Sie alle diese oben festgelegt – einschließlich das Client-Stück – über die Konfiguration und das Herunterladen von Client-Side-Agent. Natürlich wäre, die für Windows-basierte Maschinen, aber befand sich das Ziel eine breitere Auswahl an Plattformen zu erreichen, direkt unter Verwendung der Sync Framework 4.0 möglicherweise die bessere Wahl.

Ich möchte Sie und die neuesten Sync Framework SDK downloaden und mindestens führen das Lernprogramm zum Einrichten der Synchronisierungsdienst in Windows-Azure mit eine Datenbank SQL Azure zu führen das Beispiel für den Silverlight-Client, um ein Gefühl dafür zu fördern. Nehmen Sie für diejenigen, die ein wenig tapfer sind die Dateien wie dem Windows Mobile 6.5-Beispiel im 4.0 CTP (es sind zwei Projekte) beschrieben, und verwenden Sie zum Erstellen Ihrer eigenen Windows-basierten Synchronisationsclient.

Joseph Fultz ist Architekt bei Microsoft Technology Center in Dallas, wo er mit Enterprise-Kunden und ISVs entwerfen und Erstellen von Prototypen für Software-Lösungen zur Erfüllung von geschäftlichen und Markt gerecht werden arbeitet. Er ist bei Veranstaltungen wie Tech · gesprochen.ED und ähnliche interne Schulungen und Veranstaltungen.

Dank an die folgenden technischen Experten für die Überprüfung dieses Artikels: Ganeshan Iyer