這個系列的翻譯也拖了一段時間,現(xiàn)在決定一次性將它理清了。關(guān)于合并復(fù)制服務(wù)器的配置在前面的翻譯文章中都已經(jīng)詳細地論述完了,現(xiàn)在終于到了訂閱者是如何使用我們配制好的合并復(fù)制了。下面的代碼是針對.NET CompactFramework的,其實整個合并復(fù)制的過程中,安裝和配置占了95%的時間,而創(chuàng)建訂閱僅僅需要5%的時間,合并復(fù)制的這個特征減小了我們敲代碼時出現(xiàn)錯誤的幾率,將更多地工作移植到了服務(wù)器上來,這樣如果有錯誤發(fā)生的話,我們求助微軟的幾率要比求助開發(fā)者的幾率要大得多。
在.Net CompactFramework中,合并復(fù)制我們只需要一個類SqlCeReplication,它是位于System.Data.SqlServerCe中的。
using System.Data.SqlServerCe;
下面是示例代碼:
SqlCeReplication repl = null;
try
{//實例化一個SqlCeReplication對象
repl = new SqlCeReplication();
//設(shè)置IIS上的SQL MOBILE SERVER代理
repl.InternetUrl = YourServerToolsUrl;
//訪問ServerTools的用戶
repl.InternetLogin = YourWebUser;
//訪問ServerTools的用戶密碼
repl.InternetPassword = YourWebPwd;
//發(fā)布復(fù)制的數(shù)據(jù)庫服務(wù)器名稱
repl.Publisher = YourPublisher;
//發(fā)布復(fù)制的數(shù)據(jù)庫名稱
repl.PublisherDatabase = YourPublisherDatabase;
//發(fā)布合并復(fù)制的名稱
repl.Publication = YourPublication;
//用戶過濾同步數(shù)據(jù)的主機名稱
repl.HostName = UserID;
//發(fā)布復(fù)制的驗證模式
repl.PublisherSecurityMode = SecurityType.NTAuthentication;
//訂閱者的名稱
repl.Subscriber = new Random().Next().ToString();
//訂閱者的數(shù)據(jù)庫的連接字符串
repl.SubscriberConnectionString = ConnectionString;
//如果數(shù)據(jù)庫不存在的話就下載新的數(shù)據(jù)庫
if (!DatabaseExists())
{
repl.AddSubscription(AddOption.CreateDatabase);
}
repl.Synchronize();
}
finally
{
repl.Dispose();
}
考試大提示:當你完成一切工作,如果設(shè)備初始化時未加入數(shù)據(jù)庫時,下載快照文件時,會先在設(shè)備上創(chuàng)建一個初始化的本地數(shù)據(jù)庫,這個初始化的本地數(shù)據(jù)庫是20KB,然后數(shù)據(jù)庫的內(nèi)容就會被下載并插入到這個空數(shù)據(jù)庫當中,如果這時候剛剛好網(wǎng)絡(luò)斷開或者是其他原因造成不能下載數(shù)據(jù)庫的時候,你會發(fā)現(xiàn)你的設(shè)備上的數(shù)據(jù)庫只有20KB。所以說在同步數(shù)據(jù)庫之后檢查下數(shù)據(jù)庫的大小是否大于20KB,如果大于20KB的話就表明你已經(jīng)成功地將服務(wù)器上的數(shù)據(jù)下載到設(shè)備上來,否則的話就表明同步失敗。
同步復(fù)制因為在服務(wù)器端做了太多的工作以至于我們在碰到錯誤的時候會顯得束手無策,這些都是需要我們彼此去交流探討關(guān)于同步工作的一些問題的解決方案。
在.Net CompactFramework中,合并復(fù)制我們只需要一個類SqlCeReplication,它是位于System.Data.SqlServerCe中的。
using System.Data.SqlServerCe;
下面是示例代碼:
SqlCeReplication repl = null;
try
{//實例化一個SqlCeReplication對象
repl = new SqlCeReplication();
//設(shè)置IIS上的SQL MOBILE SERVER代理
repl.InternetUrl = YourServerToolsUrl;
//訪問ServerTools的用戶
repl.InternetLogin = YourWebUser;
//訪問ServerTools的用戶密碼
repl.InternetPassword = YourWebPwd;
//發(fā)布復(fù)制的數(shù)據(jù)庫服務(wù)器名稱
repl.Publisher = YourPublisher;
//發(fā)布復(fù)制的數(shù)據(jù)庫名稱
repl.PublisherDatabase = YourPublisherDatabase;
//發(fā)布合并復(fù)制的名稱
repl.Publication = YourPublication;
//用戶過濾同步數(shù)據(jù)的主機名稱
repl.HostName = UserID;
//發(fā)布復(fù)制的驗證模式
repl.PublisherSecurityMode = SecurityType.NTAuthentication;
//訂閱者的名稱
repl.Subscriber = new Random().Next().ToString();
//訂閱者的數(shù)據(jù)庫的連接字符串
repl.SubscriberConnectionString = ConnectionString;
//如果數(shù)據(jù)庫不存在的話就下載新的數(shù)據(jù)庫
if (!DatabaseExists())
{
repl.AddSubscription(AddOption.CreateDatabase);
}
repl.Synchronize();
}
finally
{
repl.Dispose();
}
考試大提示:當你完成一切工作,如果設(shè)備初始化時未加入數(shù)據(jù)庫時,下載快照文件時,會先在設(shè)備上創(chuàng)建一個初始化的本地數(shù)據(jù)庫,這個初始化的本地數(shù)據(jù)庫是20KB,然后數(shù)據(jù)庫的內(nèi)容就會被下載并插入到這個空數(shù)據(jù)庫當中,如果這時候剛剛好網(wǎng)絡(luò)斷開或者是其他原因造成不能下載數(shù)據(jù)庫的時候,你會發(fā)現(xiàn)你的設(shè)備上的數(shù)據(jù)庫只有20KB。所以說在同步數(shù)據(jù)庫之后檢查下數(shù)據(jù)庫的大小是否大于20KB,如果大于20KB的話就表明你已經(jīng)成功地將服務(wù)器上的數(shù)據(jù)下載到設(shè)備上來,否則的話就表明同步失敗。
同步復(fù)制因為在服務(wù)器端做了太多的工作以至于我們在碰到錯誤的時候會顯得束手無策,這些都是需要我們彼此去交流探討關(guān)于同步工作的一些問題的解決方案。