Как решить проблемы с подключениями невозможно (ни БД, ни внешние системы), когда доступно несколько подключений - PullRequest
0 голосов
/ 12 апреля 2011

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

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

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

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

1 Ответ

1 голос
/ 12 апреля 2011

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

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

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

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

...