Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 194

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 188 189 190 191 192 193 < 194 > 195 196 197 198 199 200 .. 260 >> Следующая

Поясним все это на примере реальной ситуации. Координатор указывает диспетчерам подготовиться к подтверждению изменений, и те сообщают, что готовы и могут сделать это. Координатор передал диспетчеру, отвечающему за сберегательный счет, сообщение о необходимости подтвердить изменения, но до того
как координатор успел обратиться к диспетчеру текущего счета, произошла фатальная ошибка (например, прекратилась подача электроэнергии). Что дальше?
Итог транзакции зависит от координатора транзакций и диспетчера ресурсов. Оба компонента должны хранить сведения о состоянии транзакции. Координатор должен произвести восстановление после сбоя, определить, что транзакция по-прежнему не завершена, и обратиться к соответствующим диспетчерам ресурсов, чтобы завершить ее.
У диспетчера ресурсов должна бы п, возможность подтвердить ьсс изменения, подготовленные им на первом этапе процесса фиксации. Предположим, прекращение подачи электроэнергии, поставившее завершение транзакции под сомнение, затронуло компьютер с БД текущих счетов. СУБД требуется произвести восстановление после сбоя, определить, что транзакция по-прежнему не завершена, предоставить возможность подтвердить изменения и обратиться к
координатору, чтобы завершить транзакцию.
Как вы понимаете, на создание координатора транзакций или диспетчера ресурсов нужно много времени и усилий.
Распределенные транзакции в Framework
Первоначально Microsoft реализовала координатор транзакций и сопутствующие технологии для ОС Windows как пакет дополнений Windows NT 4. Теперь данная функциональность интегрирована в Windows и относится к службе Component Services.
ГЛАВА Сложные случаи обновления данных
447
Прелесть данной лрхи;\;.г.ры в том, что для ипюль.^илшя функций управления транзакциями, предоставляемых службой Component Services, придется написать лишь небольшой объем кода. Вы пишете код, как обычно, и затем указываете Component Services подтвердить или отменить транзакцию. Служба берет нелегкий труд управления распределенной тра нзакцией на себя. На рис. 11-18 приведен пример взаимодействия с несколькими БД в распределенной транзакции при помощи Component Services.
Служба Component Servies
Ваш компонент
Координатор распределенных
БД сберегательных счетов
Распределенная транзакция
Снятие
со сберегательного
счета
Внесение средств
на текущий счет
БД
те'.ущи*
счетов
Рис. 11-18. Взаимодействие с несколькими БД
в распределенной транзакции при помощи Component Services
Поддержка распределенных транзакций в БД
Для использования распределенных транзакций в БД вашей СУБД нужен диспетчер ресурсов, способный взаимодействовать с координатором транзакций из состава Component Services.
Диспетчеры ресурсов некоторых СУБД (например, SQL Server и Oracle) поддерживают такую функциональность, однако диспетчерами многих других СУБД (Access. DBASE и т. д.) она не поддерживается. Перед планированием архитектуры приложения на основе распределенных транзакций убедитесь, что диспетчер ресурсов вашей БД реализует двухэтапное подтверждение и способен взаимодействовать со службой Component Services.
На самом деле область применения распределенных транзакций ограничивается исключительно БД. Например, служба Microsoft Message Queuing позволяет отправлять и получать сообщения в составе распределенных транзакций.
Создание собственных компонентов
Реализация поддержки распределенных транзакций в .NET-компоненте — относительно простая задача. Во-первых, убедитесь, что ваш проект — библиотека классов. Служба Component Services рассчитана на работу без пользовательского интерфейса. Вы ведь не хотите, чтобы время ожидания транзакции истекло из-за того, что на сервере выводятся невидимые для пользователей модальные диалоговые окна? Во-вторых, убедитесь, что проект содержит ссылку на пространство
448 Часть III Автономная работа с данными: объект DataSet модели ADO NET
имен и что класс наследует от класса Seriict'dO'Wfwwiit.
Теперь можно писать код, использующий транзакции.
Для регистрации библиотек в службе Component Services вам потребуются две утилиты командной строки — Sn.exe и RcgSvcs.t-xc. Первая находится во вложенной папке Bin каталога Framework SDK и генерирует для вашей библиотеки строгое имя (strong name). Вторая, расположенная в каталоге Framework, регистрирует вашу библиотеку в Component Services.
В коде следует использовать имя приложения, соответствующее библиотеке. и сослаться на строгое имя файла:
Visual Basic .NET Imports System.Reflection
'Укажите имя приложения CUM+
<assembly: ApplicationName("HyServiceComponent")> Укажите строгое имя сборки
<assembly: AssemblyKeyFileAttribute("MyServiceComponent.snk")>
^
Visual C# .NET
using System.Reflection;
//Укажите имя приложения C0K+-
[assembly: ApplicationName("MyServiceComponent")]
//Укажите строгое имя сборки
[assembly: Asse»blyKeyFileAttribute("HyServiceComponent. snk" )]
Подробнее об этих параметрах и использовании утилит командной строки — в документации MSI >N.
Атрибут TransactionOption
Предыдущая << 1 .. 188 189 190 191 192 193 < 194 > 195 196 197 198 199 200 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100