Ошибка синхронизации базы данных SQL Server с использованием SyncServices и WCF

У меня есть база данных на сервере - Microsoft SQL Server 2008 R2 (окончательная первоначальная версия) - 10.50.1600.1 (X64). Настроен для синхронизации с клиентом базы данных SQL Server Compact через WCF с использованием служб синхронизации Microsoft для ADO.NET.

Иногда эта ошибка стала появляться:

Microsoft.Synchronization.Data.SyncException: невозможно перечислить изменения в DbServerSyncProvider для таблицы "ИМЯ ТАБЛИЦЫ" в группе синхронизации "ИМЯ ГРУППЫ".

---> System.Data.SqlClient.SqlException: при получении результатов от сервера произошла ошибка транспортного уровня (поставщик: поставщик TCP, ошибка: 0 - истекло время ожидания семафора.)

в System.Data.SqlClient.SqlConnection.OnError(исключение SqlException, логическое breakConnection)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
в System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, ошибка UInt32)
в System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
в System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
в System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
в System.Data.SqlClient.TdsParserStateObject.ReadByte()
в System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
в System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
в System.Data.SqlClient.SqlDataReader.get_MetaData()
в System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, логический асинхронный)
в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String, результат DbAsyncResult)
в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String)
в System.Data.SqlClient.SqlCommand.ExecuteReader(поведение CommandBehavior, метод String)
в System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(поведение CommandBehavior)
в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
в Microsoft.Synchronization.Data.Server.DbServerSyncProvider.EnumerateChanges(SyncGroupMetadata groupMetadata, SyncSession syncSession, транзакция IDbTransaction, EnumerateChangeType changeType, SyncSchema traceSchema)

Имена таблиц каждый раз разные.

Подскажите пожалуйста как решить эту проблему.

Благодарю.

1 ответ

Я полагаю, что вы получите эту ошибку, если у вас не было успешной синхронизации в течение периода хранения, который вы указали в базе данных. Смотрите эту ссылку

Мы также иногда получаем это, когда процесс синхронизации не может получить данные из-за открытой транзакции или блокировки другого процесса. (Я считаю, что исправить это SET READ_COMMITTED_SNAPSHOT ON:

ALTER DATABASE yourdatabasenamehere
SET READ_COMMITTED_SNAPSHOT ON

GO
)
Другие вопросы по тегам