как удалить кеш на веб-сайте ASP с веб-сайта ASP.NET на том же сервере?

У меня два разных сайта на одном сервере. Один сайт представляет собой форум (написанный на ASP Classic), где пользователи могут публиковать информацию в различных разделах и темах и т. д. Другой веб-сайт (написанный на ASP.NET VB) используется для клуба, где пользователи могут покупать и скачивать видео и т. д. Сайт форума использует кэширование для сохранения информации о каждом зарегистрированном пользователе. Сайт клуба обновил несколько полей пользовательских данных, хранящихся в базе данных форума. Проблема в том, что мне нужно удалить кешированную информацию, сохраненную в кеше для конкретного пользователя, всякий раз, когда я обновляю информацию о пользователях с веб-сайта клуба. Обновления, сделанные на форуме, работают нормально, потому что они удаляют кеш.

Я попытался получить доступ к кешу с веб-сайта клуба ASP.NET, используя: Application.Contents("_mbUI-2"). Это правильный ключ, но я не получаю "Ничего". Поскольку я не могу получить к нему доступ, я также не могу его удалить. Я предполагаю, что «Приложение» является отдельным из-за отдельных веб-сайтов.

Если бы я мог вызвать страницу на сайте ASP с помощью xmlhttp, я мог бы написать программу для удаления кеша. Но мне нужно вызвать его из кода программной части, а не с помощью события, такого как нажатие кнопки и использование javascript для выполнения http-вызова.

Если бы был способ получить доступ к кешу с обоих веб-сайтов, это было бы идеально.

Какие-либо предложения?

Спасибо, Джеймс


person Jim    schedule 21.07.2010    source источник


Ответы (1)


Используйте активный кеш, который обнаруживает изменения непосредственно в базе данных, например SqlCacheDependency. Или используйте общий кеш, например memcached. Или напишите протокол межпроцессного взаимодействия между двумя процессами (процесс ASP.Net и классический процесс ASP). Реализация веб-службы в классическом ASP и вызов службы из вашей ASP.Net может быть достаточно хорошей формой IPC (неэффективной, но простой).

Если бы был способ получить доступ к кешу с обоих веб-сайтов, это было бы идеально.

Использование Memcached даст вам именно это. Memcached имеет как клиентские библиотеки .Net, так и клиентские библиотеки COM, поэтому ваши ASP.Net и ASP Classic могут обращаться к одной и той же ферме Memcached («ферма» в вашем случае представляет собой всего лишь одну службу Memcached, работающую на хосте сервера IIS). Вы должны префиксировать все элементы с пространством имен приложения, чтобы избежать конфликтов для отдельных элементов. Для общих элементов можно либо использовать общее пространство имен (более элегантно и эффективно), но для этого потребуется, чтобы два клиента маршалировали одно и то же (не тривиально), либо вы могли бы просто сделать так, чтобы каждый процесс аннулировал кеш. другого (менее эффективного и более уродливого, но более простого).

person Remus Rusanu    schedule 21.07.2010
comment
SqlCacheDependency звучит интересно... Если это будет работать с классическим кешем ASP. Я не уверен, так как ссылка говорит об ASP.NET. Я посмотрю на это, спасибо - person Jim; 21.07.2010
comment
Лежащая в его основе технология (уведомления о запросах) работает с ASP Classic (см. rusanu.com/2006/06/17/the-mysterious-notification и msdn.microsoft.com/en-us/library/ms130764(SQL.90).aspx), но в вашем случае я считаю, что memcached более подходит. Заставить Query Notification работать с OleDB и классическим ADO далеко не тривиально. - person Remus Rusanu; 21.07.2010