|
|
Опубликовано 05.05.2018 10:53:17
|
|
|
|

Цитируя чьё-то другое руководство: В реальной разработке выполните событие, а затем вызовите другой интерфейс для вставки данных; если в логике обработки есть исключение, ранее вставленные данные станут нежелательными, Мы хотим иметь возможность определить весь метод как транзакцию, а класс TransactionScope предоставляет простой метод, позволяющий не взаимодействовать с самой транзакцией. отмечать блок кода как участник транзакции. Объект TransactionScope создаёт транзакцию и устанавливает её в свойство Current класса Transaction.
1. Преимущества TransactionScope 1. Им удобнее использовать. TransactionScope может реализовывать неявные транзакции, чтобы вы могли писать код на уровне доступа к данным, не учитывая транзакции, но управляя транзакциями на бизнес-уровне. 2. Можно реализовать распределённые транзакции, такие как кросс-база данных или MSMQ.
2. Недостатки TransactionScope 1. Стоимость и производительность не высока. Например, вы управляете транзакциями библиотеки только в «Scope». Использование «TransactionScope» немного расточительно. 2. В обычных условиях, если вы используете «TransactionScope», нужно настроить MSDTC, установить файрвол и открыть порт 139. Этот порт нельзя изменить
3. Если нужно использовать распределённые транзакции, нужно об этом думать 1. Обязательно ли эта операция должна быть в транзакции? Если этот этап не будет выполнен или не пройдёт, стоит ли откатить всю транзакцию назад? Разве нет элегантных мер компенсации или устойчивости к отказу? 2. Сколько баллов включают распределённые транзакции? Должно быть много операций в реальном времени? Разве нельзя упростить некоторые баллы с помощью уведомлений? 3. После запуска распределённой транзакции вы выполняли операции, независимые от транзакции, даже если эти операции были не связаны с транзакциями? (например, чтение данных, вычисления, ожидание возвращения пользователя сообщения, ожидание возврата вызова других модулей и т.д.) 4. Ты не учёл некоторые операции чтения в транзакции, да? Это лёгкая ошибка, когда вы зачисляете выбранную операцию в транзакцию. 5. Некоторые этапы вашей операции можно выполнить после завершения всех операций. Такой тип операции имеет очевидные характеристики уведомления. Операции уведомления говорят: я даю вам уведомление и гарантирую, что оно дойдёт до вас; Вы должны принять это уведомление и убедиться, что оно обработано, но не обязаны заниматься этим сразу после моего уведомления. Эту операцию, конечно, можно выполнить с другой задачей.
4. Обращайте внимание на следующие моменты при использовании распределённых транзакций 1: Убедитесь, что машина, участвующая в транзакции, включила поддержку распределённых транзакций. 2: Если на машине включён файрвол, нужно установить процесс msdtc как исключение. 3: Машина, участвующая в транзакции, не может пересечь домен (если она междоменная, у Microsoft на данный момент нет точного решения); 4: Используйте распределённые транзакции только при нескольких базах данных, если это одна и та же база данных, лучше использовать SqlTransaction. 1. Сначала добавьте ссылку System.Transactions (нужно добавить Net-ассемблер)
Код на вызове C# следующий:
Адрес блогов, объясняющих этот распределённый класс транзакций, очень ясен:http://www.cnblogs.com/artech/archive/2010/01/31/1660356.html
2. Настройте конфигурацию веб-сервера и SQL-сервера
Панель управления — > Системы и безопасность — > Инструменты управления — > Компонентные сервисы (Это требуется как для WEB, так и для SQL-серверов)
Панель управления — > Системы и безопасность — > Инструменты управления — > Сервисы
(Это требуется как для WEB, так и для SQL-серверов)
Панель управления — > Система и безопасность — > Межсетевой экран Windows
(Это требуется как для WEB, так и для SQL-серверов)
3. Конфигурация MSSQL
Для подключения к серверам кликните правой кнопкой мыши — > свойства
4. Настройте хосты (настройте только WEB-сервер, если нет — также настройте его на SQL-сервере)
C:\Windows\System32\drivers\etc Файл hosts, который открывается с помощью Блокнота (Информация о SQL-сервере должна быть настроена в файле Hosts на WEB сервере) (Если тест провалился, настройте информацию веб-сервера в файле Hosts на SQL-сервере)
|
Предыдущий:Внешние ссылки на посты на форумах Discuz X добавляют атрибут nofollowСледующий:Функции, которые сохраняют два знака после запятой в C#, и как их использовать
|