2014-03-31 2 views
1

Мне нужна помощь в MS Sync Framework, поскольку я новичок в ней. Я пробовал простую синхронизацию между двумя одинаковыми таблицами в двух разных базах данных. Код, который я использовал в учебнике MS Sync http://msdn.microsoft.com/en-us/library/ff928494.aspx.Microsoft Sync Framework с параметрами MS SQL Server 2008 EE и FILESTREAM не работает

Когда я пытаюсь Применить Предоставления на стороне сервера я получаю исключение

ALTER DATABASE не удалась, поскольку READ_COMMITTED_SNAPSHOT и опции ALLOW_SNAPSHOT_ISOLATION не может быть установлен в положение ON, когда база данных FILESTREAM файловых групп. Чтобы установить READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION в положение ON, вы должны удалить файловые группы FILESTREAM из базы данных. Заявление ALTER DATABASE не выполнено.

public void CreateProvisioningOnServer() 
{ 

    // create a connection to the SyncExpressDB database 
    SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS2008; Initial Catalog=SyncDB; Trusted_Connection=Yes"); 

    // get the description of ArticlesScope from the SyncDB server database 
    DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ArticlesScope", serverConn); 

    // create server provisioning object based on the ProductsScope 
    SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc); 


    if (clientProvision.ScopeExists(scopeDesc.ScopeName)) 
    return; 

    // starts the provisioning process 
    clientProvision.Apply(); 
} 

Я использую вариант FILESTREAM для экспресс-выпуск SQL Server 2008 для хранения изображений, так что я не могу использовать MS Sync Framework, как это и я должен переопределить как-то SqlSyncScopeProvisioning?

Следующий вопрос У меня есть

Я использую MS Sync Framework для синхронизации между 2 базами данных, как в Express Edition.

Клиентская сторона будет загружать данные из 16 таблиц серверов - такая же структура таблиц. Клиентская сторона будет загружать данные в 4 таблицы серверов - возможно, небольшую структуру таблиц на клиенте и сервере.

Это хороший способ, которым я хочу воспользоваться MS Sync Framework? Я всегда делал такую ​​синхронизацию своими собственными хранимыми процедурами, но была проблема с производительностью (а также другие), когда синхронизация с клиентскими БД через Интернет и связанные серверы очень неэффективна.

И какой путь?

+0

Первый вопрос: можно ли использовать 2 базы данных, одну синхронизацию и одну, которая не с изображениями? Или вам нужно синхронизировать изображения? В этом случае вы можете использовать синхронизацию файлов синхронизации, а не синхронизацию db для изображений? – stombeur

+0

Второй вопрос: да, sync fw является подходящим кандидатом для этого сценария, если вы придерживаетесь такого количества таблиц (20-иш). Я использовал подход sync fw 2.1 (таблицы метаданных), но позже решил, что подход 2.0 с отслеживанием изменений был лучше. Тем не менее, это не поддерживается экспресс-службой на стороне клиента. Но для этого есть хорошее (не поддерживаемое) обходное решение. – stombeur

+0

@StephaneT спасибо за ваше время. Да, мне нужно также синхронизировать изображения. Но главная проблема заключается в том, что даже если я не синхронизировал изображения, структура синхронизации генерирует это исключение. – MartinM

ответ

0

Sync Framework использует изоляцию моментальных снимков для фильтрации изменений, которые происходят во время процесса синхронизации. Если вы используете более низкий уровень изоляции, изменения, которые происходят во время процесса синхронизации, но откат могут быть включены в вашу синхронизацию. Это приведет к несуществующим изменениям на сервере (они были отменены), которые будут отправлены вашим клиентам. Вот почему вы получаете сообщение об ошибке и разрешаете его, вы можете переписать SqlSyncProvider, как вы указываете. Но я бы не рекомендовал этого.

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

После этого часть данных синхронизации должна работать. Затем вы можете решить, как вы хотите синхронизировать изображения с клиентами. Храните их на диске на сервере и используйте стандартную синхронизацию файлов синхронизации для клиентов или сохраняйте их в другой базе данных (на том же сервере) и расширьте синхронизацию файлов рамок синхронизации, чтобы читать их из базы данных, а не с диска и отправьте их на диск на клиентах.