Freigeben über


Bereitstellen von Anwendungen und Versionsverwaltung

In diesem Thema werden die Bereitstellung und die Versionsverwaltung von Client- und Serveranwendungen erläutert. Informationen zum Initialisieren von Peerdatenbanken finden Sie unter „Initialisieren einer Serverdatenbank“ in Vorgehensweise: Konfigurieren und Ausführen der Synchronisierung für die Zusammenarbeit (Nicht-SQL Server).

Wie Sie eine Client- und Serveranwendung bereitstellen, die Sync Framework verwendet, ist davon abhängig, ob es sich um eine 2-Ebenen- oder um eine n-Ebenen-Anwendung handelt. In 2-Ebenen-Anwendungen befindet sich der gesamte Synchronisierungscode auf dem Client, und die Anwendung kann wie jede andere Anwendung bereitgestellt werden, die auf SQL Server Compact basiert. In der Regel gehört zur Bereitstellung entweder die Verwendung von ClickOnce, um die Anwendung zu veröffentlichen, oder das Erstellen von Anwendungspaketen, die anschließend auf die einzelnen Clients kopiert werden. Weitere Informationen dazu, wie Sie Anwendungen bereitstellen können, die SQL Server Compact verwenden, finden Sie in den Themen "Bereitstellen von Anwendungen" and "Vorgehensweise: Erstellen und Bereitstellen einer Anwendung auf einem Desktopcomputer und Tablet PC" in der Onlinedokumentation zu SQL Server Compact. In einer n-Ebenen-Anwendung müssen Sie darüber hinaus auch Code auf dem Computer bereitstellen, der die serverseitigen Synchronisierungskomponenten hostet.

Erstellen und Initialisieren der Clientdatenbank

In 2-Ebenen- und n-Ebenen-Anwendungen liegt es an Ihnen zu entscheiden, wie die Clientdatenbank erstellt und initialisiert werden soll, in der sich das Schema und die Daten befinden, das bzw. die die Anwendung benötigt. Grundsätzlich gibt es dafür zwei Ansätze:

  • Erstellen Sie mit Sync Framework die Datenbank, und laden Sie bei der ersten Synchronisierung das Tabellenschema und die Daten herunter. Dies ist die einfachste Methode. Bei vielen Clients und großen Datenmengen kann sie aber viel Netzwerkverkehr und eine hohe Serverlast zur Folge haben.

  • Erstellen Sie die Datenbank vorab, und legen Sie dabei ein Tabellenschema und ein Anfangsdataset fest. Die Datenbank, die im Format einer SDF-Datei vorliegt, kann auf diese Weise transportiert oder durch die Clientanwendung heruntergeladen werden. Falls die Anwendung bei der ersten Synchronisierung inkrementelle Änderungen herunterlädt, kann sie gleichzeitig die Clientdatenbank auf den neuesten Stand aktualisieren. Bei diesem Ansatz müssen Sie einen entsprechenden Wert für die CreationOption-Eigenschaft festlegen.

    Wenn die Anwendung Hochladevorgänge beinhaltet und Sie wissen möchten, wo Änderungen herrühren, kann die Anwendung die ClientId-Eigenschaft so festlegen, dass die Clientdatenbank auf dem Server eindeutig identifiziert wird. Andernfalls generiert Sync Framework eine neue ID für die Datenbank.

    Hinweis

    Die Voraberstellung der Clientdatenbank eignet sich nicht für Anwendungen, in denen die Daten für jeden Client anders gefiltert werden, da es so bei der Erstsynchronisierung zu verpassten Änderungen kommen kann.

Weitere Informationen dazu, wie Sie die Clientdatenbank initialisieren können, finden Sie unter Vorgehensweise: Initialisieren der Clientdatenbank und Arbeiten mit dem Tabellenschema.

Anwendungsversionsverwaltung

Es ist möglich, dass nach der Entwicklung und Bereitstellung einer Anwendung neue Versionen dieser Anwendung entwickelt werden. Bei der Anwendungsversionsverwaltung gilt es, auf die folgenden beiden Punkte zu achten:

  • Die Bereiche der Anwendung, die von einer neuen Version betroffen sind

  • Ob eine neue Version und frühere Versionen gleichzeitig nebeneinander bestehen müssen

In der Regel sind n-Ebenen-Anwendungen für Sync Framework einfacher zu aktualisieren, da die serverseitigen Komponenten unabhängig von den clientseitigen Komponenten aktualisiert werden können. Sie können hierdurch einen neuen Dienst bereitstellen, der die aktualisierte Funktionalität enthält und die Clients vor serverseitigen Änderungen abschirmt, bis diese für eine Aktualisierung der clientseitigen Komponenten bereit sind.

Versionsverwaltung für n-Ebenen-Anwendungen

Bei Sync Framework ist die hauptsächliche Anwendungsaktualisierung eine Schemaänderung in der Serverdatenbank. Sync Framework gibt Schemaänderungen nicht automatisch vom Server an den Client weiter. Sofern Sie die entsprechenden Bereiche der Anwendung aktualisieren, werden Schemaänderungen aber unterstützt. Eine Liste der Schemaänderungen, die in der Clientdatenbank unterstützt werden, finden Sie unter Arbeiten mit Tabellenschemas. Wenn auf der Serverdatenbank eine Schemaänderung vorgenommen wird, sollten Sie als Erstes entscheiden, ob diese Änderung überhaupt an den Client weitergegeben werden muss. Wenn Sie z. B. einer Tabelle in der Serverdatenbank eine Kreditkartenspalte hinzufügen, eine Ihrer Geschäftsregeln aber besagt, dass die Mitarbeiter keinen Offlinezugriff auf Kreditkarteninformationen haben dürfen, müssen Sie diese Schemaänderung nicht an den Client weitergeben. Wenn Sie möchten, dass die Schemaänderung weitergegeben wird, hängt die Art der Weitergabe davon ab, um was für eine Änderung es sich handelt.

Allgemeine Schemaänderungen

Die beiden häufigsten Schemaänderungen bestehen darin, einer vorhandenen Tabelle eine Spalte oder eine ganz neue Tabelle hinzuzufügen bzw. eine vorhandene Tabelle neu in die Anwendung aufzunehmen. Wenn die Anwendung eine neue zu synchronisierende Tabelle benötigt, müssen Sie für die Tabelle einen SyncAdapter hinzufügen. Nach dem Aktualisieren der Serverkomponenten kann die Clientanwendung oder der Benutzer der Anwendung bestimmen, ob die neue Tabelle synchronisiert werden soll. Wenn die neue Tabelle synchronisiert werden soll, müssen die Clientkomponenten so geändert werden, dass sie eine SyncTable für die neue Tabelle enthalten. Diese Änderungen müssen auf irgendeine Weise an alle Clientanwendungen weitergegeben werden. Mit der ClickOnce-Technologie können Sie Anwendungsaktualisierungen veröffentlichen, und Anwendungen können vor dem Start prüfen, ob Aktualisierungen vorhanden sind. Wenn Sie einer Tabelle eine neue Spalte hinzufügen und diese Spalte synchronisiert werden soll, müssen Sie die Spalte der Clientdatenbank hinzufügen und die Befehle aktualisieren, die zum Synchronisieren von Änderungen verwendet werden. Wenn es sich bei der Schemaänderung um eine andere Änderung als um das Hinzufügen einer neuen Spalte handelt, verwerfen Sie die Tabelle auf dem Client, und erstellen Sie die Tabelle mit Sync Framework oder einer anderen Methode neu.

Gleichzeitiges Vorhandensein mehrerer Versionen

In einigen Szenarien können neue und alte Versionen einer Clientanwendung parallel nebeneinander vorhanden sein. In solchen Fällen haben Sie die Wahl zwischen zwei verschiedenen Ansätzen:

  • Behalten Sie mehrere Versionen der Serverkomponenten bei, sodass ältere Versionen der Clientkomponenten weiterhin auf die entsprechende Version der Serverkomponenten zugreifen können. Die einfachste Methode der Versionsverwaltung ist das Bereitstellen eines neuen Diensts mit der aktualisierten Funktionalität. Clients können in diesem Fall mithilfe der ClickOnce-Technologie aktualisiert werden. Nach Abschluss des Upgrades wird der Client auf den neuen Internetdienst umgeleitet.

  • Entwerfen Sie Client- und Serverkomponenten so, dass sie einen Anwendungsversionsparameter verwenden. Bei diesem Ansatz kann die Clientanwendung den Server benachrichtigen, welche Version sie erwartet. Sehen Sie sich dazu das folgende Beispiel an. Die darin enthaltene gespeicherte Prozedur, die Einfügungen auf dem Server auswählt, akzeptiert einen @appversion-Parameter. SelectIncrementalInsertsCommand wird ein Parameter hinzugefügt, und anschließend wird durch Verwendung eines SyncParameter im SyncAgent ein Wert bereitgestellt. Bei der Synchronisierung wird die Anwendungsversion an den Server gesendet, und die gespeicherte Prozedur wählt die richtige Version des Tabellenschemas aus.

    this.Configuration.SyncParameters.Add(
          new SyncParameter("@appversion", 1));
    customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int);
    
    Me.Configuration.SyncParameters.Add( _
          New SyncParameter("@appversion", 1))
    customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int); 
    
    CREATE PROCEDURE usp_CustomerSelectIncrementalInserts(
        @sync_last_received_anchor timestamp, 
        @sync_new_received_anchor timestamp, 
        @appversion int
    )
    
    AS
        IF @appversion = 1
        BEGIN
            SELECT CustomerId, CustomerName, SalesPerson
            FROM Sales.Customer 
            WHERE InsertTimestamp > @sync_last_received_anchor 
            AND InsertTimestamp <= @sync_new_received_anchor
        END
        ELSE IF @appversion = 2
        BEGIN
            SELECT CustomerId, CustomerName, SalesPerson, CustomerType
            FROM Sales.Customer 
            WHERE InsertTimestamp > @sync_last_received_anchor 
            AND InsertTimestamp <= @sync_new_received_anchor
        END
        ELSE
        BEGIN
            PRINT('Unrecognized version')
            RETURN
        END
    

Siehe auch

Konzepte

Architektur und Klassen für die Client- und Serversynchronisierung
Überlegungen zum Entwurf und zur Bereitstellung von Anwendungen