Автор: Dflying Chen ( http://dflying.cnblogs.com/ )
Для некоторых сложных сервисов, выполнение которых занимает много времени и не предъявляет высоких требований к работе в режиме реального времени, выбор кэша часто является эффективным способом повышения эффективности. Реализация веб-службы .NET полностью учитывает необходимость использования кэша. Для включения кэша нужны только простые настройки. Вызов веб-службы в Atlas также может использовать этот механизм кэша, чтобы уменьшить ненужные накладные расходы на стороне сервера.
Чтобы включить кэш веб-службы, вам нужно всего лишь добавить следующий атрибут в объявление WebMethod:
[WebMethod(CacheDuration = 5)]
, где значение CacheDuration представляет время кэширования в секундах.
Но этот метод Cache предоставляется веб-сервисом, Atlas ничего о нем не знает, и каждый вызов по-прежнему отправляется на сервер. Таким образом, этот кэш не может улучшить влияние задержки в сети на пользователей.
Давайте узнаем больше о кэше веб-службы с помощью примера программы.
Сначала напишите веб-службу, верните текущее время и укажите CacheDuration как 5 секунд:
[WebService(Namespace = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
общедоступный класс CachedWebService: System.Web.Services.WebService
{
[WebMethod(CacheDuration = 5)]
общедоступный DateTime GetGurrentTime()
{
вернуть DateTime.Now;
}
}
Затем создайте страницу Atlas, добавьте ScriptManager и укажите в ней эту веб-службу:
<Услуги>
Услуги>
Добавьте несколько HTML-тегов для вызова этой веб-службы и отображения результатов:
Последняя часть — это JavaScript-часть, где мы отображаем результаты каждого вызова на странице для удобства анализа:
function btnInvoke_onclick() {
CachedWebService.GetGurrentTime(onCompleted);
}
функция onCompleted(результат) {
$('result').innerHTML += результат + "
";
}
Давайте проверим это в браузере. После многократного нажатия кнопки результаты будут следующими. Вы можете увидеть роль кэша:
При этом в Fiddler видно, что эти запросы на самом деле отправляются на сервер, а Cache — это всего лишь серверная реализация:
Исходный код этого примера можно скачать здесь: