Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как справиться с проблемами, когда невозможно установить соединения (ни с БД, ни с внешними системами), когда доступно несколько соединений

Автор вопроса: Naveen ChakravarthyОтветов: 1

У меня есть вопрос относительно обработки нескольких соединений. Эти соединения могут быть либо соединением с БД, соединением SOA, соединением EMS и т. д......

Допустим, у меня есть 1 соединение с базой данных, где я извлекаю данные, и у меня есть 2 соединения EMS, оба имеют разные данные и независимы. Данные отправляются в EMS и обновляют статус независимо от того, успешно отправлены данные или нет.

1) Если соединение с базой данных не работает или возникли какие-либо другие проблемы, когда мы не можем получить доступ к базе данных. 2) Любое 1 соединение EMS не работает, приложение должно продолжить обработку другого соединения EMS. 3) Что произойдет, если мы сможем отправить данные в EMS, но не сможем обновить статус БД из-за проблем с базой данных, что мы должны делать со всеми сообщениями, которые находятся в памяти и которые нам нужно отправить в EMS. 4) Не удается установить соединение с 1 EMS, но другие смогли установить, поэтому приложение должно обрабатывать эти сообщения EMS.

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

error-handlingintegration-testingconnectionems

Ответы

Ответ 1 · рейтинг 1 · Jon Raynor

Несколько подключений к разным источникам звучит как хорошее решение для System.Transactions (если EMS поддерживает это).

Попробуйте что-то вроде этого, таким образом, все 3 операции будут успешными или неудачными как единица работы.

        try
        {
            using (TransactionScope tran = new TransactionScope())
            {
                Method1Save(); //DB
                Method2Save(); //EMS1
                Method3Save(); //EMS2
                tran.Complete();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Problem " + ex.ToString());
        }

Если EMS не поддерживает TransactionScope, то вам придется обрабатывать его вручную, возможно, поместив транзакцию в само соединение, а затем зафиксировав все транзакции после успешного выполнения операций, что означает, что соединения будут дольше оставаться открытыми для каждого источника данных.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы