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