SQL Server CE复制失败:内部错误:传输消息中的HTTP标头信息已损坏或丢失

本文关键字:信息 HTTP 已损坏 消息 复制 CE Server 失败 内部 SQL 传输 | 更新日期: 2023-09-27 18:26:26

我在Windows Server 2008计算机上安装了SQL Server 2008 R2,并在其上创建了一个测试数据库和相应的发布,以便使用合并复制。我已经设置了上述发布以满足SQL Server 2008和SQL Server CE 3.1用户的需求。我还使用本演练安装和配置了IIS 7。

我正在另一台电脑上开发一个C#应用程序,该应用程序应该从SQl Server 2008 R2数据库中复制数据,并通过合并复制将其放入本地SQl Server CE数据库中。然而,它失败得很惨,出现了以下错误:

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));
}

我做了一些研究,我只能找到出现这个错误的两个原因。一个是使用启用了特定设置的Microsoft ISA服务器,但我没有。另一种情况是,发布服务器和订阅服务器使用的是不同版本的SQL Server CE驱动程序,而不是。根据注册表,这两台机器的版本都是3.5.8080.0(SQL Server CE 3.5 SP2)。

我怎样才能让它发挥作用?

SQL Server CE复制失败:内部错误:传输消息中的HTTP标头信息已损坏或丢失

您不能使用replisapi.dll,这是用于SQL Server到SQL Server的Web同步,您必须使用sqlcesa35.dll-请参阅此博客文章:http://erikej.blogspot.com/2010/06/walkthrough-configuring-merge.html