синхронизировать портал онлайн-заказов с локальной базой данных
Вопрос
Итак, мы создаем локально размещенную пользовательскую систему торговых точек (на сайте клиента), в которой нет ничего особенного.Это все .NET, C # и SQL Server.
Одним из требований является то, что система позволяет принимать заказы и через Интернет.По различным причинам (надежность / скорость соединения, резервные копии, стабильность, техническое обслуживание и т.д.) веб-портал будет размещен за пределами сайта, в какой-либо стандартной веб-хостинговой компании.
Сведения о продукте находятся в локальной базе данных, и поэтому нам нужно каким-то образом синхронизировать базу данных внешнего веб-сайта с этими данными.Очевидно, что он должен быть безопасным и не слишком перегруженным пропускной способностью.
Мы придумали решение, которое сводит к минимуму воздействие локальной базы данных на внешний мир:
- веб-приложение не может получить доступ ни к чему из локального приложения.
- единственный способ перемещения данных - это push-сообщение, отправленное из локального приложения в веб-приложение.
- единственное, что может сделать веб-приложение, это отправить уведомление в локальную базу данных о том, что принят новый заказ.Затем локальное приложение подключится к внешнему приложению и получит информацию о заказе.
Итак, мы думали о подобном дизайне, используя веб-сервисы и просто определяя основные действия в веб-приложении, такие как addProduct (id, бла-бла-бла)
Но тогда нам приходится писать процедуры для синхронизации данных, например, если продукт удален из локального приложения, но внешнее приложение временно недоступно и т.д. и т.п...
Является ли это разумным подходом, или есть способ получше?
Решение
Это тот случай, когда SOA кажется мне применимым.Я бы рассмотрел возможность предоставления определенных функциональных возможностей из POS-приложения с использованием WCF.Для этого необходимо, по крайней мере, следующее:
- вы можете повторно использовать функциональность POS-системы вместо того, чтобы дублировать ее части на веб-сайте
- Используя, например, привязку MSMQ, вы можете функционировать в несвязанных ситуациях
- WCF обладает отличными механизмами безопасности, транзакционной поддержкой и т.д...
таким образом, вы в конечном итоге добавите большую ценность в POS-систему вместо того, чтобы выполнять одноразовую связь между POS-терминалом и веб-сайтом.
Чтобы узнать больше о WCF, я могу порекомендовать Программирование сервисов WCF автор : Джувал Лоуи
Другие советы
На самом деле это не прямой ответ на ваш вопрос ...Я бы попытался подключить VPN-туннель между двумя сайтами, а если вы не можете, попробуйте использовать SSH-туннель?
Помимо того, что безопасность просто хороша, по моему опыту, с появлением VPN открывается гораздо больше возможностей, поскольку приходится думать о вещах, которые раньше были бы слишком небезопасны, чтобы их рассматривать.
@olle Это выглядит многообещающе.Одна из проблем заключается в том, что соединение между онлайн-порталом b / w и локальным приложением ненадежно.Тем не менее, мы по-прежнему хотим иметь возможность принимать заказы, когда ссылка отключена.Итак, я думаю, мы собираемся использовать WCF в веб-приложении для чтения данных с сервера и кэширования их в локальных таблицах.Веб-приложение будет запрашивать данные через промежуточный уровень, который обслуживает содержимое из кэшированных таблиц, если вызов WCF не возвращается в течение короткого времени.Если он вернется успешно, кэш будет удален и заменен результатами.Звучит как план?