Мое веб-приложение использует ADO.NET против SQL Server 2008. Операции записи в базу данных выполняются для основной базы данных (издателя), но чтения сбалансированы по нагрузке для основной и дополнительной базы данных (подписчика). Мы используем встроенную в SQL Server репликацию транзакций, чтобы поддерживать вторичность в актуальном состоянии. В большинстве случаев задержка в несколько секунд не является проблемой.
Однако у меня есть случай, когда я хотел бы заблокировать, пока транзакция не будет зафиксирована на дополнительном сайте. Блокировка на несколько секунд - это нормально, но возврат устаревшей страницы пользователю - нет. Есть ли способ в ADO.NET или TSQL указать, что я хочу дождаться завершения репликации? Или я могу от издателя проверить состояние репликации транзакции, не подключаясь к вторичному серверу вручную.
[править]
99,9% времени, данные в подписчике "достаточно свежо". Но есть одна операция, которая делает его недействительным. Я не могу читать от издателя каждый раз, когда он может стать недействительным. Если я не могу решить эту проблему при репликации транзакций, можете ли вы предложить альтернативную архитектуру?