Самый простой способ модифицировать логику повторных попыток при переходе с LINQ to SQL на SQL Azure - PullRequest
4 голосов
/ 06 января 2011

У меня есть несколько существующих веб-форм ASP .NET и приложений MVC, которые в настоящее время используют LINQ to SQL с базой данных SQL Server 2008 Express на Windows VPS: один VPS для IIS и SQL.Я начинаю перерастать способность VPS эффективно размещать как SQL, так и IIS и готовлюсь разделить их.Я подумываю о переносе базы данных в SQL Azure и сохранении IIS на VPS.

После первоначального исследования кажется, что реализация логики повторов на уровне доступа к данным является обязательным условием при внедрении SQL Azure.Я подозреваю, что это еще более важно для реализации в моей ситуации, когда IIS будет работать на VPS вне инфраструктуры Azure.

Я ищу указатели о том, как сделать это с наименьшими усилиями и влиянием на мои существующиекодовая база.Есть ли хороший шаблон повторения, который можно применить один раз на уровне доступа к данным LINQ to SQL, в отличие от необходимости заключать все мои операции LINQ to SQL в логику try / catch / wait / retry?

Ответы [ 3 ]

1 голос
/ 13 января 2011

Я не вижу необходимости усложнять это. Оберните все это в попытку поймать, оберните это через некоторое время <количество повторов, и все готово. </p>

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

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

0 голосов
/ 12 января 2011

Основной принцип заключается в том, что вы пытаетесь повторить любую транзакцию, которая не удалась по причине, которая больше не может быть истинной.Таким образом, если транзакция завершается неудачно из-за тупика или плохого соединения с сервером базы данных, вам следует повторить ее несколько раз с перерывом между каждой попыткой. Все это зависит от того, правильно ли определена ваша транзакция .

В зависимости от вашей логики вы сможете реализовать повтор на «уровне запроса страницы».

  • Это зависит от того, можно ли безопасно повторить работу, выполняемую запросом страницы, или от полного выполнения запроса страницы, находящегося внутри транзакции базы данных.
  • Также подумайте олюбое состояние памяти, которое вы храните на сервере.
  • HttpHander, добавленный в конвейер обработки страниц, должен иметь возможность сделать это для всех страниц

Я не думаю, что существует«Магия, которую вы можете использовать» в вашем коде, чтобы разобраться в этом, если у вас не определены четкие транзакции.

Если вы не используете какую-либо транзакцию, вы можете попробовать написать все свои sql, чтобы можно было запускать их любое количество раз, а затем просто иметь собственный подкласс объекта команды, который отключается при необходимости.

0 голосов
/ 12 января 2011

Вы можете взглянуть на структуры Aspect Oriented Programming (AOP) для управления логиками повторов с минимальными усилиями. Одним из таких фреймворков является AspectF , который свободно реализует принципы АОП. С ним легко разобраться и работать.

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