Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

По сравнению с компонентами COM сборки легче создавать, развертывать и поддерживать. Маловероятно, что .NET когда-либо полностью заменит разработчикам COM, для которых скорость выполнения является основной задачей. Однако, скорее всего, разработчики приложений Web и программ, которые внутренне используются организациями, сочтут сборки .NET избавлением от ада DLL.

Главa 20

Службы COM+ 

Введение

В этой главе рассматриваются два больших вопроса: 1) что такое службы COM+, как

они разрабатываются и как работают; и 2) каким образом службы COM+ могут использоваться на платформе .NET в целом и в C#, в частности.

Мы рассмотрим первый вопрос в первой части этой главы. Даже если вы знакомы с MTS — предшественником служб COM+, вы узнаете много нового при рассмотрении новых служб, таких как очереди сообщений и события. Как будет показано, службы COM+ предоставляют намного больше, чем поддержка транзакций, — значительный объем готовой функциональности, где каждый профессиональный программист C# может найти что-то полезное.

Последняя часть главы посвящена второму вопросу: как службы COM+ используются на платформе .NET. Мы рассмотрим классы, интерфейсы и атрибуты, которые находятся в пространстве имен EnterpriseServices, а также утилиту

RegSvcs.exe
.

Хотя службы COM+ могут показаться первоначально сложными, в частности, когда потребуется преодолеть барьеры взаимодействия, в конце концов выясняется, что они экономят много времени и приложения, построенные на их основе, предельно надежны.

Давайте начнем с рассмотрения того, как появились службы COM+.

Службы COM+ в ретроспективе

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

По мере развития технологий программирования поставщики упаковали полезную функциональность в повторно используемые серверные компоненты. (Теперь, например, если разработчику потребуется функциональность базы данных, то он может использовать Oracle или SQL Server). По мере дальнейшего развития все больше полезной функциональности извлекалось из прикладных программ и переносилось на уровень серверных программ и даже операционной системы.

Можно рассматривать службы COM+ как проявление этой тенденции. Службы COM+ облегчили жизнь разработчиков уровня предприятия, предоставляя ценную функциональность, которую легко могут использовать компоненты пользователя. Когда компоненту необходима такая возможность, как обеспечение транзакции, то для получения надежного решения разработчик может положиться на службы COM+.

Состав служб COM+ 

Службы COM+ начинали жизнь как дополнительный модуль Windows NT, называемый Сервер транзакций Microsoft (MTS). В настоящее время Windows 2000 определяет MTS как составную часть операционной системы, переименовывая ее в ходе процесса.

В дополнение ко всем исходным свойствам MTS, службы COM+ включают в себя новые возможности, в еще большей степени сокращающие объем кода, который должен написать разработчик компонентов.

Службы COM+, которые уже были представлены в MTS, включают в себя:

□ Обеспечение транзакций

□ Организацию пулов объектов

□ Оперативную активизацию объектов (JIT, Just-in-Time)

□ Безопасность

Новые службы,

введенные COM+:

□ Поддержка событий

□ Очереди сообщений компонентов

□ Выравнивание нагрузки компонентов

В этой главе мы рассмотрим каждую из служб COM+, как старые, известные из MTS, так и новые, которые могут быть еще незнакомы. Но сначала кратко рассмотрим лучшего помощника COM+: "snap-in" служб компонентов (Component Services). (Snap-in является специальным типом программы, таким как SQL Server или IIS, который выполняется внутри интерфейса консоли управления Microsoft — ММС.)

Snap-in служб компонентов

Опытные разработчики могут вспомнить, что администратор MTS был доступен в Windows NT из меню Start как пункт Option Pack. В соответствии со своим новым статусом составной части операционной системы службы COM+ перечислены в Windows 2000 более отчетливо в меню Administrative Tools под заголовком Component Services.

Левая панель окна служб компонентов (Component Services) содержит иерархическое дерево с компьютером, приложением COM+ и узлами компонентов. (На языке служб компонентов приложение является группой компонентов COM+, которые рассматриваются (администрируются) как целое, это называлось в MTS пакетом). Класс каждого компонента в приложении представлен золотым шариком со знаком плюс в середине, который начинает вращаться, когда происходит обращение к компоненту.

Существует два метода импорта сборок .NET в службы компонентов. Первый метод использует функциональность, предоставленную snap-in служб компонентов, а второй использует CLR.

Мы рассмотрим оба метода импорта позже. В данный момент начнем обзор различных служб, которые предоставляет COM+.

Транзакции COM+ 

Назначение транзакций

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

Рассмотрим web-сайт, который занимается в основном обработкой кредитных карт для заказов. Если пользователь заказывает на сайте какой-то продукт, то требуется, чтобы не только было выполнено списание с его счета, но чтобы запись заказа была помещена в базу данных заказов. Если возникает проблема с вводом записи о заказе в базу данных, то списание средств с кредитной карты должно быть отменено и заказ также должен быть отменен, иначе пользователь заплатит за товар, который он никогда не получит.

public void PlaceOrder(OrderInfo, objOrderInfo, UserInfo objUserInfo) {

 CreditCard objCreditCard=new CreditCard;

 OrderTable objOrderTable=new OrderTable;

 // Шаг 1: Списание средств с кредитной карты

 objCreditCard.PlaceCharge(objOrderInfo, objUserInfo);

 // Если здесь возникает ошибка между шагами 1 и 2,

 // то заказчик не получит продукт, за который

 // он заплатил

Поделиться с друзьями: