2012-03-03 53 views
1

我在Windows Server 2008計算機上設置了SQL Server 2008 R2,並在其上創建了測試數據庫和相應的發佈爲了使用合併複製。爲了迎合SQL Server 2008和SQL Server CE 3.1訂閱者的需求,我設置了該發佈。我還使用this演練安裝並配置了IIS 7。SQL Server CE複製失敗:內部錯誤:HTTP頭信息在傳輸消息中已損壞或丟失

我開發一個不同的電腦,應該將數據從SQL Server 2008 R2數據庫複製,並通過合併複製把它放在一個本地SQL Server CE數據庫的C#應用​​程序。然而,它失敗了,但出現以下錯誤:

A first chance exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll 
Internal error: HTTP header information is either corrupted or missing in the transport message. It could be a network transmission error or an IIS problem. 

順便提一下,HResult值是0x80072F76。

在服務器端,IIS日誌具有以下內容:

CReplicationListenerWorker , 2012/03/03 02:21:14.939, 3400, 174, S2, INFO: =============== START PROCESSING REQUEST ============== 
CategorizeRequest    , 2012/03/03 02:21:14.940, 3400, 93, S1, ERROR: GetMessageListenerObject failed, hr = 0x80070057 
CReplicationListenerWorker , 2012/03/03 02:21:14.940, 3400, 261, S2, WARN: CategorizeRequest failed, hr = 0x80004005. 
CReplicationListenerWorker , 2012/03/03 02:21:14.940, 3400, 262, S2, WARN: Generating default web page. 
CReplicationListenerWorker , 2012/03/03 02:21:14.940, 3400, 396, S2, INFO: =============== DONE PROCESSING REQUEST =============== 

我的代碼是這樣的:

SqlCeReplication repl = new SqlCeReplication(); 
repl.InternetUrl = "https://winserver2008/SQLReplication/replisapi.dll"; 
repl.InternetLogin = "SQL"; 
repl.InternetPassword = "somepassword"; 
repl.Publisher = "WINSERVER2008"; 
repl.PublisherDatabase = "Test";    
repl.PublisherSecurityMode = SecurityType.DBAuthentication; 
repl.Publication = "TestPublish"; 
repl.Subscriber = "Dev System"; 
repl.SubscriberConnectionString = "Data Source=" + dbFilePath; 
repl.DistributorLogin = "SQL"; 
repl.PublisherLogin = "SQL"; 
repl.DistributorAddress = "192.168.232.128"; 

if (File.Exists(dbFilePath)) { 
    File.Delete(dbFilePath); 
} 
repl.AddSubscription(AddOption.CreateDatabase); //Create new db 

try{ 
    repl.Synchronize(); 
} catch (SqlCeException e) { 
    Console.WriteLine(e.Message + " - HResult: " + String.Format("{0:X}", e.HResult)); 
} 

我做了一些研究,我能找到的只有兩個原因,出現此錯誤。一個是使用微軟ISA服務器的特定設置啓用,我不是。另一種情況是,如果發佈者和訂閱者使用的是不同版本的SQL Server CE驅動程序,則不會。根據註冊表,這兩臺機器都在版本3.5.8080.0(SQL Server CE 3.5 SP2)上。

我該如何得到這個工作?

回答

1

不能使用replisapi.dll,這是SQL Server到SQL Server websync,必須sqlcesa35.dll使用 - 看到這個博客帖子:http://erikej.blogspot.com/2010/06/walkthrough-configuring-merge.html

+0

我覺得很奇怪,我遍sqlcesa35.dll看到網上的地方而不是replisapi.dll,但我找不到解釋。您可能想添加一個關於在該博客文章中爲快照創建共享的部分;我一開始就不知道Web同步嚮導要求什麼。 – 2012-03-03 22:01:07