Ошибка репликации SQL Server CE: внутренняя ошибка: информация заголовка HTTP повреждена или отсутствует в транспортном сообщении - PullRequest
1 голос
/ 03 марта 2012

Я установил SQL Server 2008 R2 на компьютере с Windows Server 2008 и создал на нем тестовую базу данных и соответствующую публикацию для использования репликации слиянием. Я установил упомянутую публикацию для обслуживания подписчиков 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).

Как мне заставить это работать?

1 Ответ

1 голос
/ 03 марта 2012

Вы не можете использовать replisapi.dll, это для веб-синхронизации SQL Server и SQL Server, вы должны использовать sqlcesa35.dll - см. Этот пост в блоге: http://erikej.blogspot.com/2010/06/walkthrough-configuring-merge.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...