2010-11-26 122 views
0

我有一個SQL 2008 R2服務器。 我已經創建了一個使用嚮導的出版物,似乎沒問題。 「系統數據庫」部分有一個「分佈」數據庫,其中沒有太多內容。 (不知道這是否已經存在,或者「發佈嚮導」是否已經創建了它。) 我已經安裝了網絡同步並且可以通過IIS7和自簽名證書訪問relisapi.dll。SQL Server 2008通過網絡同步複製到SQL Express 2005

我的ASP.NET網站安裝程序安裝SQL Express 2005. 我寫了一個小網站來測試訂閱和初始同步的創建。 我不會「創建初始」數據庫,因爲我假設第一個同步將從服務器拉下所有內容。

以下幾行代碼似乎可行,因爲預訂是在SQL 2008服務器中的SQL Express &中創建的。

' Define the pull subscription. 
      subscription = New MergePullSubscription() 
      subscription.ConnectionContext = subscriberConn 
      subscription.PublisherName = publisherName 
      subscription.PublicationName = publicationName 
      subscription.PublicationDBName = publicationDbName 
      subscription.DatabaseName = subscriptionDbName 
      subscription.HostName = hostname 
      subscription.CreateSyncAgentByDefault = True 

      ' Specify the Windows login credentials for the Merge Agent job. 
      subscription.SynchronizationAgentProcessSecurity.Login = winLogin 
      subscription.SynchronizationAgentProcessSecurity.Password = winPassword 

      ' Enable Web synchronization. 
      subscription.UseWebSynchronization = True 
      subscription.InternetUrl = webSyncUrl 

      ' Specify the same Windows credentials to use when connecting to the 
      ' Web server using HTTPS Basic Authentication. 
      subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication 
      subscription.InternetLogin = winLogin 
      subscription.InternetPassword = winPassword 

      If Not subscription.LoadProperties() Then 
       ' Create the pull subscription at the Subscriber. 
       subscription.Create() 

然後我運行這段代碼:

 If Not subscription.PublisherSecurity Is Nothing Or _ 
       subscription.DistributorSecurity Is Nothing Then 

       '0: Only error messages are logged. 
       '1: All progress report messages are logged. 
       '2: All progress report messages and error messages are logged. 
       subscription.SynchronizationAgent.OutputVerboseLevel = 2 
       subscription.SynchronizationAgent.Output = "c:\createmerge.txt" 

       ' Synchronously start the Merge Agent for the subscription. 
       subscription.SynchronizationAgent.Synchronize() 

但syncronize引發錯誤:

The subscription to publication 'My publication' could not be verified. Ensure that all Merge Agent command line parameters are specified correctly and that the subscription is correctly configured. If the Publisher no longer has information about this subscription, drop and recreate the subscription.

在服務器上,使用 「複製監視器」 它顯示我的訂閱作爲「單元化」。

我認爲一個問題是,我的subscription.HostName是錯誤的。 MSDN上的微軟例子說

"adventure-works\garrett1" 

但冒險的作品是否是服務器,實例或數據庫,誰是garrett1(登錄或別的東西),目前尚不清楚。那實際上應該是什麼呢?

因爲我對複製一無所知,而且我一直在關注MSDN和一些書籍,所以我會認真考慮下一步該怎麼做。

對不起,這麼久了!

回答

0

好的,我有兩個原因遇到麻煩。

首先在我的開發PC上,機器已經在某個時間點重新命名,所以連接到我的本地用戶SQL是錯誤的。

其次,IIS7上的「自簽名證書」是解析爲內部名稱,而不是從外部世界通過HTTPS可以看到的真實名稱。我們獲得了正確域名的測試證書,並且工作正常!

1

根據the documentationSubscription.Hostname的設置對於讓出版物正常工作並不重要 - 它是合併發佈進行分區時用戶爲HOST_NAME提供的價值。有關過濾出版物的更多信息,請參閱here

如果你確信你有correctly configured your environment支持網絡同步,你將不得不一次調試這一塊。

通過爲發佈商的另一個數據庫設置基於非基於Web的訂閱以證明該出版物按預期工作,可能值得開始。假設可行,請嘗試在SQL 2005 Express實例上設置非Web訂閱,然後繼續測試Web同步。

0

好吧,繼承人一些關於HOST_NAME()的更多信息,如果你有興趣。

http://msdn.microsoft.com/en-us/library/ms152478%28v=SQL.110%29.aspx

基本上你用它來一個變量傳遞給出版商與您選擇的值(在服務器過載HOST_NAME功能)。這允許您過濾行,例如Employee.ID = CONVERT(HOST_NAME()int),以僅獲取subscrption所需的行。

相關問題