Веб-служба C # против источника базы данных Oracle, который иногда недоступен

#c# #wcf #web-services #oracle10g

#c# #wcf #веб-службы #oracle10g

Вопрос:

У нас есть существующее большое приложение, которое содержит много данных. Мы хотели бы использовать его в качестве источника данных для различных веб-приложений, написанных на C #, поэтому у нас больше нет избыточных данных.

Данные, которые мы просматриваем, меняются не слишком сильно, поэтому кэширование большую часть времени будет работать нормально. Итак, мы пишем веб-службу C # для обработки данных, которые будут повторно использоваться в различных внутренних приложениях.

Однако примерно раз в месяц источник базы данных Oracle недоступен.

Каков наилучший способ справиться с этим в веб-службе, чтобы другие приложения, которые полагаются на эти данные, также не были нарушены?

Комментарии:

1. Что это за веб-служба? ASMX?

2. @Джон Сондерс На данный момент да, если нет лучшего / более простого способа? Должен ли я использовать WCF вместо этого?

3. Да, используйте WCF для всех новых разработок. Смотрите Microsoft заявляет: веб-службы ASMX являются «устаревшей технологией»

Ответ №1:

Настроить репликацию или партнеров по отработке отказа? Честно говоря, это не похоже на работу для большего количества кода; это звучит как работа для большей инфраструктуры. Я знаю, что лицензии Oracle дороги, но разработчикам платят за то, чтобы они обходили недоступность.

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

Ответ №2:

Решением было использовать вторичный кэш, срок действия которого не истекает.
Вторичный кэш обновляется последними значениями, если первый (более короткий) кэш успешно обновлен из базы данных. Если запрос к базе данных завершается неудачей и срок действия первого кэша истек, то первый кэш обновляется вторым кэшем. Таким образом, всегда есть вторичный кэш.