65.9K
CodeProject 正在变化。 阅读更多。
Home

N 层架构中的 ADO.NET 同步服务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (24投票s)

2008年10月7日

CPOL

4分钟阅读

viewsIcon

200817

downloadIcon

1860

本文是《ADO.NET 同步服务简介》的后续文章,探讨了如何使用 WCF 服务轻松地将 2 层同步应用程序转换为 N 层。

本文是《ADO .NET 同步服务简介》的后续文章,探讨了如何使用 WCF 服务轻松地将两层同步应用程序转换为 N 层。在不连接到主数据库的情况下同步数据的能力非常有价值,并为许多复杂的架构实现打开了大门。在线有许多关于同步服务的示例,但大多数都是用 C# 编写的,因此我在这里只是为 VB 社区提供非常基础的示例。

背景

在上一篇文章中,我们看到了如何使用 ADO.NET 同步服务轻松创建偶尔连接的智能客户端应用程序,但这在许多情况下可能不起作用,因为出于安全原因或网络限制等其他限制,数据库服务器不向客户端公开。在这些情况下,您需要通过中间服务同步客户端。Sync Framework 的优点在于,它甚至可以使这项任务变得更容易,您可以使用任何协议在任何通道上进行通信,并且仍然以许多可配置的方式将数据与主数据源同步。

Using the Code

在此示例中,我将继续《ADO 同步服务简介》中的内容,您可以从文章中下载项目并继续下面的步骤。

在当前项目(2 层示例)中,我们有一个客户端连接到主 SQL 服务器并直接同步。服务器同步提供程序和客户端同步提供程序都驻留在我们的客户端项目中。为了使其成为 N 层,我们所要做的就是将服务器同步提供程序从客户端项目移到一个单独的服务中。

2 层同步应用程序的架构

N 层同步应用程序的架构

从上面的架构可以看出,服务器同步提供程序和同步适配器已移至单独的服务,并且客户端同步代理使用任何传输协议通过服务代理与服务器同步提供程序进行通信。

现在,让我们看看如何转换当前项目。首先,向我们的解决方案添加一个类型为 **WCF 服务库**的新项目,并将其命名为 **WcfSyncService1**(当然,您不必将其命名为 WcfSyncService1,可以称之为米老鼠或其他任何名称)。

现在,在客户端项目中,双击 LocalDataCache1.sync 文件将其打开。此文件是由我们向项目中添加本地数据缓存时生成的 Studio 创建的。单击“高级选项”以展开选项,然后将“服务器项目位置”更改为 WCFSyncService1。在早期项目中,“服务器项目位置”和“客户端项目位置”均为 SyncService2Tier。

单击“确定”后,向导会将服务器同步提供程序移动到 WCFSyncService1 项目,并创建两个新文件:LocalDataCache1.Server.SyncLocalDataCache1.Server.SyncContract.vb

为了简化我们的工作,服务终结点和行为定义已在 LocalDataCache1.Server.SyncContract.vb 文件中提供。我们所要做的就是取消注释它,复制它,然后将其移动到服务项目中 App.config 文件的适当部分。将服务终结点移到 <system.serviceModel> 下的 <services> 下,并将行为部分移到 <behaviors> 下的 <serviceBehaviors> 下。请记住进行一项更改;基址将定义为 localhost:8080/LocalDataCache1SyncService/。您可能希望从 URL 中删除端口号,因为我们经常有其他服务在端口 8080 上运行,在这种情况下,运行服务时会出错。目前最好的选择是删除 URL 中的端口号,将其保留为 localhost/LocalDataCache1SyncService/

现在,我们必须做的最后一项手动工作是将我们自定义编写的代码从客户端项目移动到我们的服务。我们曾在客户端同步提供程序(LocalDataCache1.Sync)的 LocalDataCache1ServerSyncProvider 下编写了自定义冲突处理代码。在客户端项目中查看 LocalDataCach1.sync 的代码,并将以下代码剪切并粘贴到 LocalDataCache1.Server.sync 中。Studio 不会自动将此代码移动到服务,因为它是由我们编写的自定义代码。

Partial Class LocalDataCache1ServerSyncProvider

    Private Sub LocalDataCache1ServerSyncProvider_ApplyChangeFailed _
                  (ByVal sender As Object, _
                   ByVal e As Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs) _
                   Handles Me.ApplyChangeFailed

        e.Action = Microsoft.Synchronization.Data.ApplyAction.RetryWithForceWrite

     End Sub

End Class

让我们将 WCF 项目设为启动项目并运行它。右键单击正在运行的服务,复制服务的地址。

向我们的客户端项目添加新的服务引用。现在,将我们的服务器同步提供程序的远程提供程序设置为我们的新服务代理。为此,请右键单击客户端项目上的 LocalDataCache1.sync 并选择“查看代码”。在 OnInitialized 下添加此定义。

Me.RemoteProvider = New Microsoft.Synchronization.Data.ServerSyncProviderProxy(
    New ServiceReference1.LocalDataCache1SyncContractClient)

这就完成了。只需将客户端项目设置为启动项目并运行它。记住在运行客户端项目时保持服务运行。您现在拥有一个 N 层智能客户端应用程序,它将在偶尔连接的环境中运行,并使用 WCF 服务按需同步数据。

关注点

这是一个非常简单的示例,展示了如何利用服务将客户端数据与主数据库同步。我将尝试发布更多关于使用 VB.NET 的同步服务以及探索更高级功能和复杂场景的文章。

© . All rights reserved.