Как синхронизировать данные на сайте ASP.NET и в локальной базе приложения?
Добрый день, коллеги.
Есть приложение C#.NET + SQL Server, работающее в локальной сети (простая CRM с заказами). Стоит задача разработать простенький сайт (желательно: ASP.NET + SQL Server), где клиент сможет видеть состояние своих заказов и размещать новые. Заказчик принципиально не хочет поддерживать инфраструктуру для сайта и хочет видеть его на стороннем хостинге.
Встает вопрос: какую технологию лучше использовать для синхронизации данных между двумя базами?
Спасибо.
upd. Вопрос скорее относится к тому, на каком уровне и с использованием каких технологий правильней синхронизироваться? Варианты:
1. Уровень данных (синхронизация баз средствами SQL Server: скорость, защищенность)
2. Уровень приложения (локальное приложение вызывает WebAPI сайта)
или другие способы.
Заказчик принципиально не хочет "держать" у себя инфраструктуру сайта (обязательно нужно хоститься у крупной компании). Может быть, я не совсем верно сформулировал вопрос (сейчас поправлю). Имеется ввиду не столько синхронизация баз, как функционал SQL Server (спасибо за ссылку на Change Data Captupe), сколько правильный (быстрый, защищенный, ...) механизм синхронизации.
Николай Третьяков понимаю, что не хочет держать инфраструктуру, но почему бы, например, не кинуть VPN в локалку заказчика? Любой опытный админ поднимет IPsec и настроит файрволл на пропуск только необходимого трафика к SQL Server и обратно. Админ SQL Server пусть создаст пользователей с нужными правами, как и посоветовал Дмитрий Ковальский .
Кстати, насчет WebAPI - если не хотите держать инфраструктуру всего сайта, почему б не предоставить небольшой веб-сервис? Это будет даже лучше - всякие системы бронирования билетов так и делают. Какой-нибудь aviasales.ru хостится на своих серверах, и уж точно не имеет прямого доступа к SQL-базам авиаперевозчиков. Все данные по билетам прилетают от веб-сервисов, они для этого и были придуманы. Киньте также VPN к заказчику, поднимите у него сервис (если нужна производительность, можно даже не WebAPI взять, а WCF поверх net.tcp или Protocol Buffers) и дергайте его с сайта. Причем, именно ASP.NET приложение будет дергать этот сервис, а не внешний клиент из интернета, чтобы заказчик меньше переживал о безопасности данных.
Сергей Кузьмин: Во-первых, это разные уровни изоляции. Внутренняя база гораздо больше (в смысле бизнес-логики и видов хранимой информации).
Во-вторых, нельзя забывать о том, что могут быть проблемы с доступом к базе на стороннем хостинге. Такие проблемы могут остановить работу всего офиса.
Используйте общий источник данных со сноской - сторона клиента имеет крайне ограниченные права на взаимодействие с базой. Фактически вам там нужен только select и insert в виде пары хранимых процедур. Заводите пользователя, который может только вызывать эти хранимки и все в общем секюрно и спокойно. Или у вас есть хорошие причины и ограничения не использовать подобное решение?
Поправил формулировку вопроса. Причиной не использовать очевидный способ является то, что заказчик не готов поддерживать у себя инфраструктуру сайта. Принципиально размещение сайта у хостера.