マージ レプリケーションを使用するために、Windows Server 2008 マシンに SQL Server 2008 R2 をセットアップし、その上にテスト データベースと対応するパブリケーションを作成しました。SQL Server 2008 および SQL Server CE 3.1 のサブスクライバー向けに、上記の発行物を設定しました。また、このウォークスルーを使用して IIS 7 をインストールおよび構成しました。
SQl Server 2008 R2 データベースからデータをコピーし、マージ レプリケーションを介してローカルの SQL Server CE データベースに配置することになっている別の PC で 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));
}
いくつかの調査を行ったところ、このエラーが発生する理由は 2 つしか見つかりませんでした。1 つは、特定の設定を有効にして Microsoft ISA サーバーを使用することですが、私はそうではありません。もう 1 つは、パブリッシャーとサブスクライバーが異なるバージョンの SQL Server CE ドライバーを使用している場合です。レジストリによると、両方のマシンのバージョンは 3.5.8080.0 (SQL Server CE 3.5 SP2) です。
どうすればこれを機能させることができますか?