Совместное использование данных между двумя веб-приложениями в ASP.NET - PullRequest
1 голос
/ 14 октября 2010

У меня есть веб-приложение (MainApplication), где многие страницы содержат пользовательский веб-элемент управления, который ищет некоторое содержимое в кэше. Если он не может найти какие-либо данные в кэше, он отправляется в базу данных для контента. После извлечения содержимого Control отображает содержимое на странице.

В подкаталоге вышеупомянутого веб-приложения есть веб-приложение (CMS). Пользователи используют эту CMS для обновления содержимого, извлекаемого MainApplication.

Когда пользователь обновляет некоторый контент, используя CMS, мне нужно, чтобы CMS очистил соответствующую часть кэша, используемого MainApplication. Проблема в том, что как два разных веб-приложения они не могут просто взаимодействовать с одним и тем же объектом статического кэша.

Идеальным решением было бы как-то разделить экземпляр объекта кэша между обоими веб-приложениями.

Если это не удастся, что будет лучшим (с точки зрения производительности) способом связи между двумя веб-приложениями? Очевидно, что запись / чтение в базу данных может нанести ущерб цели. Я думал о плоском файле?

Обновление

Спасибо всем за помощь. Ваши замечательные ответы фактически дали мне правильные условия поиска, чтобы обнаружить, что это был повторяющийся вопрос (извините!): Недействительность кэша между двумя веб-приложениями

Ответы [ 3 ]

2 голосов
/ 14 октября 2010

У нас была такая же настройка в предыдущем проекте, над которым я работал, где у нас было одно веб-приложение ASP.NET (с поддержкой MCMS) и другое веб-приложение ASP.NET для отображения данных.

Полностью разные серверы (хотя в одном домене).

Однако, когда «редактор» обновил содержимое в приложении CMS, пользовательский интерфейс был автоматически обновлен.

Как? Рад, что ты спросил.

Мы сохранили содержимое в SQL Server и использовали репликацию. :)

Веб-приложение "frontend" считывает данные из базы данных (которая была реплицирована системой CMS).

Теперь - мы не кэшируем эти данные, потому что в базе данных мы фактически сохранили разметку (HTML) для элемента управления. Поэтому мы динамически переопределяли HTML.

Почему это "поражение цели"?

Невозможно заставить одно приложение «аннулировать» кэш в другом приложении.

Если вы идете по этому пути, вам нужно рассмотреть механизм распределенного кэширования (например, Velocity).

2 голосов
/ 14 октября 2010

Один вариант, который мне приходит в голову в таком сценарии, - это использование механизма распределенного кэша Velocity.Прочтите об этом и, если возможно, попробуйте http://msdn.microsoft.com/en-us/magazine/dd861287.aspx

1 голос
/ 14 октября 2010

В ASP.NET существует понятие зависимости кэша.Вы можете посмотреть здесь: http://www.codeproject.com/KB/web-cache/CachingDependencies.aspx или http://www.devx.com/dotnet/Article/27865/0/page/5.

Здесь также есть блок кэширования Enterprise Library, который добавляет некоторые функции к стандартному материалу: http://msdn.microsoft.com/en-us/library/ff649093.aspx

Теперь, если вы работаете в .NET 4, есть новое пространство имен System.Runtime.Caching, которое вы должны определенно использовать: http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx

Эта статья здесь "Кэширование вASP.NET с классом SqlCacheDependency "довольно интересен: http://msdn.microsoft.com/en-us/library/ms178604.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...