WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 || 3 | 4 |   ...   | 6 |

«Сертификационные экзамены 70-310 и 70-320 Разработка Web-сервисов XML и серверных компонентов на Visual и Visual Официальное пособие Microsoft для самостоятельной подготовки Москва 2004 УДК ...»

-- [ Страница 2 ] --

• — помогает настраивать и устанавливать оче реди Приложение служб использует их для обмена Добавление установочных компонентов Чтобы установить приложение службы, необходимо создать класс Installer, производ ный от У класса Installer есть набор Installers, кото рый содержит компоненты для установки ресурсов, службой во время выполнения. В этот набор входят объекты EventLoglnstaller, и Компоненты для установки журналов событий, счетчиков производительности и других ресурсов добавляют к проекту приложения службы при помощи инструмента Visual Studio под названием компонентов (Component Designer). Чтобы добавить установочный компонент для какого-либо ресурса, в окне Properties щелкните ссылку Add Installer либо щелкните этот ресурс правой кнопкой и контекстном меню выберите Add Installer (рис. 2-7).

г я да " Tains to Рис. 2-7. установочных компонентов настройка и удаление служб Как выше, требуется олин экземпляр приложения служб Windows и по одному каждой службы Windows из этого приложения. Чтобы компоненты к приложению службы, •загрузите дизайнер и щелкните ссылку Add в окне Properties — Visual автоматически сгенерирует класс Projectlnstaller с необходимыми экземплярами ServiccProcesslnstaller и Servicelnstaller. На рис. 2-8 показан класс Projectlnstaller в про екте службы Windows с установочными компонентами для журнала событий и счетчика производительности.

2-8. Установочные компоненты в Component Designer Ниже код класса сгенерированный Visual Studio Обратите на объекты Service Installer и в набор класса Projectlnstaller.

Visual Basic Public Component Designer generated code Sub ' This call is by the Component Windows и ими Add any initialization after the call End Sub ' UserService overrides dispose to clean up the component list.

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then If End If End Sub by Component Designer Private components As IContainer ' NOTE: The following procedure is required by- the Component It can be modified the Component Designer.

' Do not modify it using the code Friend WithEvents Friend WithEvents As Friend WithEvents As Friend As Private Sub = New = New = New "Application" = 4 Установка, настройка и удаление служб fig Nothing - Nothing = = End Sub ttEnd Region End Class Visual using System;

using using using namespace { /// description Projectlnstaller./// public class Projectlnstaller { ' private private private /7/ Required designer variable.

служб Windows и /// private components = public { // This required by Component Designer.

//;

Add any initialization after the call Component Designe' generated code /// /// Required method for Designer support - do not modify /// the contents of this method the code editor.

/// private void {,= new = new ServiceProcess.

= new = new // // serviceProcessInstallerl // = null;

// // servicelnstallerl // = // // // = "Application":

= "MyService":

this. = = { new 4 и // // { Класс помечен атрибутом примере кода на Visual С# или же атрибутом в примере на Visual Basic Это требует установить сборку с классом Projectlnstaller при помощи утилиты Instalutil.exe. Вызов установочного компонента гарантирует, что все компоненты будут установлены успеш но, либо не будут установлены Если при установке какого-либо компонента возникает сбой, программа установки откат установки, удаляя все компо ненты. до сбоя.

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

При этом можно будет ли доступна конкретная всем пользователям ком либо только одному из них. Контекст безопасности для приложения служб на значают при помощи свойства Account класса Это свойство через окно Properties. На рис. 2-8 свойства класса ServiceProcessInstaller показаны Свойство Account принимает значение LocalService, или User, возможные значения описаны в табл. 2-5.

Табл. 2-5. Возможные значения свойства Account Значение Назначаемый безопасности LocalService Учетная расширенным прав на локальном компьютере и предоставляющая учетные данные удаленным серверам Учетная запись пользователя с ограниченными на локальном компьютере, предоставляющая учетные данные анонимного пользователя удаленным серверам NetworkService Учетная запись пользователя с ограниченными правами на локальном компьютере, учетные данные серверам User Контекст пользователя. В этом случае во установки службы потребуется действительные имя и пароль Глава Windows и управление Установка и служб Добавив к приложению установочные компоненты и назначив службам контекст безо пасности, остается скомпилировать приложение служб и установить его на компьютер, Для этого в меню Build выберите Build Solution — Studio сгенери рует.ехе-файл приложения Полученный файл установить на компьютер. Для этой Framework предоставляет утилиту командной строки Синтаксис ее вызова Вот пример:

Утилита вызывает установочные компоненты приложения служб, которые устанавливают его вместе с включенными ресурсами согласно заданным значениям свойств. Если свойство Account экземпляра равно User, во время установки выводится диалоговое окно Set Service Login, в котором необходимо ввести имя и пароль пользователя (рис. 2-9).

service Рис. 2-9. Диалоговое окно Set Service Login После ввода имени и пароля учетной записи Installutil завершает установки, а в окне командной выводится соответствующее окно командной строки по завершении установки приложения служб показано на рис.

,, -• • ;

F I ill".

У Рис. 2-10. Окно строки Visual Studio 4 настройка и удаление служб gg Утилита также позволяет удалять приложения служб. Для этого ее нужно вызвать с ключом /и следующим образом:

Installutil /и < например, так:

Installutil /u успешно установленной службой можно вручную, при помощи или программно, посредством класса С различными способами управления службами Windows вы познакомитесь на следующем занятии.

Глава Занятие 5. Управление службами Созданной и службой Windows можно например изме нять ее состояние. Это можно вручную, при или программно, рез добавленный к приложению экземпляр класса Изучив материал этого вы сможете:

управлять службами при помощи программно управлять службами с помощью класса Продолжительность занятия — около 20 минут.

Применение Service Control Manager SCM применяют для управления приложением служб и решения административных задач, таких как:

• изменение состояния службы;

• настройка способа запуска службы;

• определений действий, выполняемых при восстановлении службы после сбоя;

• назначение службе пользовательской учетной записи;

« просмотр зависимостей службы.

Доступ к SCM осуществляется через окно Services (Службы). Чтобы вызвать его, значок Administrative (Администрирование) в Панели ния, затем щелкните значок Services (Службы) — откроется окно Services (рис.

Рис. 2-11. служб в окне Services В окне Services отображаются все установленные службы. Чтобы изменить состоя ние какой-либо из них, выберите нужную и па нели инструментов. Так можно остановить или возобновить службу.

службами Примечание Изменять состояние разрешается, только если нее установлены свойства. Например, приостановить или перезапустить службу можно при условии, что свойство ее приложения установлено в Допускается определять способ запуска службы путем изменения соответствующего Чтобы изменить способ запуска приложения служб, 1. Выберите нужную службу и шелкните на панели инструментов кнопку — откроется ее окно Properties (рис.

Рис. Окно свойств службы 2. Перейдите на вкладку General и выберите в раскрывающемся списке Startup Type требуемый способ запуска.

3. Щелкните чтобы закрыть окно свойств службы.

также позволяет указать действия, которые нужно выполнить при восстановле нии службы после сбоя.

Выберите нужную службу и щелкните на панели инструментов кнопку Properties — откроется окно свойств (Properties) 2. Перейдите на вкладку Recovery Рис. 2-13. Вкладка Создание служб Windows и ими Глава 3. Определите действие, выполняемое при первом, втором и всех сбоях службы. можно заставить запустить некоторую про грамму, компьютер или не выполнять никаких действий.

4. Щелкните чтобы закрыть окно свойств также позволяет задать учетную запись, под которой служба будет регистриро ваться в системе. Этот механизм изменять привилегии службы и способ ее взаимодействия с сетью. Службы могут работать в контексте безопасности учетной за писи или пользовательской записи. Чтобы назначить службе учет ную запись, сделайте 1. Выберите нужную службу и на панели инструментов кнопку Properties — откроется окно свойств (Properties) службы.

2. Перейдите на вкладку Log On (рис. 2-14).

fa fetwl, Рис. 2-14. Вкладка Log On 3. Чтобы запускать службу в контексте безопасности учетной записи LocalSystem, щел кните Local System Account или This Account и введите учетные данные пользова тельской учетной записи, которая будет назначена службе. Учетную запись также можно из списка всех учетных записей, в сети.

4. Щелкните чтобы закрыть диалоговое окно свойств.

Другая возможность, предоставляемая SCM, — просмотр зависимостей службы в виде списков служб, зависимых от вашей службы, и служб, от которых зависит она. Так, служба в Windows 2000 зависит от службы сервера RPC (Remote Procedure Чтобы просмотреть список зависимостей приложения службы, сделайте Выберите нужную службу и щелкните на панели инструментов кнопку Properties — откроется окно свойств (Properties) службы.

2. Перейдите на вкладку Dependencies. На рис. 2-15 показано, как выглядит эта вклад ка для службы Indexing в Windows 2000.

3. Щелкните ОК, чтобы закрыть окно свойств службы.

В дополнение к управления службами используют методы класса Service Controller. Этот класс обеспечивает программное управление службами.

службами Рис. Вкладка Dependencies Применение класса Класс ServiceController позволяет подключиться к работающей на компьютере службе и управлять ей. Подобно SCM, методы класса ServiceController могут запускать, останав ливать, и возобновлять Однако методы класса ServiceCont roller. в отличие от дополнительно способны исполнять пользовательские ды. Класс позволяет;

просматривать список служб на компьютере;

• запускать и останавливать службы;

приостанавливать и работу служб;

• запрашивать и читать свойства служб;

• пользовательские команды для исполнения службой.

Поведением служб управляют при помоши действиями службы при различных событиях. Например, для этого можно воспользоваться методом Он когда приложение служб получает уведомление о событии Pause. Одна ко необходимо следить за согласованием свойств приложения служб и событий, исполь зуемых для управления службами. Так, если свойство CanPause службы установлено в False, ни ServiceController, ни SCM не помогут приостановить службу.

Чтобы вызвать методы класса ServiceController, создайте экземпляр одноименного компонента и установите его свойства, определяющие службу, к которой следует ключиться, а также компьютер, на котором эта служба работает. Службой управляют, вызывая методы класса ServiceController. При вызове метода класса ServiceController его экземпляр передает SCM запрос на действие, a передает его службе, после чего ее приложение исполняет метол.

Никогда не помешайте компонент ServiceController и управляемую им службу в одно приложение.

А теперь рассмотрим, как создать экземпляр компонента ServiceController. Этот ком понент можно перетащить с вкладки Components панели инструментов на поверхность Создание служб Windows и формы Windows-приложения. Далее необходимо указать имя службы и компьютера, на котором она работает, при помощи свойств ServiceName и MachineName соответствен но. Компонент ServiceController, добавленный к Windows-приложению, показан на рис. 2-16.

.

Рис. Компонент ServiceController Windows-приложении Экземпляр компонента ServiceController можно добавить и из окна Server Explorer.

Найдите в окне Server Explorer сервер, на котором будет работать служба.

2. Раскройте узел Services этого сервера и найдите в нем службу, которой требуется уп равлять.

3. Щелкните правой кнопкой имя службы и в контекстном меню выберите Add To Designer — в окне Windows-приложения появится компонент ServiceController, на строенный для взаимодействия с управляемой то есть вам не придется вруч ную устанавливать свойства MachineName и ServiceName для компонента Service Controller, Список служб в окне Server Explorer показан на рис. 2-17, Создать экземпляр компонента ServiceController можно и программно:

Visual Basic Dim DBWriterController As = New "NancyD" Visual C# private new = NancyD";

= Занятие Управление Рис. 2-17. Службы в окне Server Explorer После создания экземпляра компонента разрешается вызывать методы этого класса (они описаны 2-4). Атеперь рассмот рим управление службой с применением этих методов. Вот пример метола, щего службу из приложения Windows.

Примечание корректной работы приложения необходимо добавить к нему ссылку на пространство имен Visual Basic Sub Проверить текущее состояние службы перед попыткой его изменения If = Then Else End If End Sub Visual C# private StartServiceO { Проверить текущее состояние службы перед попыткой его изменения if == служб и ими Глава { :

else { Аналогичным образом используются и другие методы класса пред назначенные для управления службами, такие как Pause, Continue и Stop. Следующий пример метод, который приостанавливает службу.

Visual Basic Проверить текущее состояние службы перед попыткой его изменения If = Then можно ли приостановить службу If = Then Else Can not Pause the Service") End If Else not Running") End If End Sub Visual private void PauseServiceO { /* Проверить текущее состояние службы перед попыткой его изменения */ if { // Проверить, можно ли приостановить службу { else Can not Pause the 5 else not } В дополнение к методам Stan, Stop, Pause и Continue используют метод Eixecute позволяющий отдавать службе команды. Чтобы заставить службу исполнить пользовательскую команду, сделайте Добавьте к вызов 2. Переопределите в приложении службы метод в код, необходимый для исполнения пользовательских действий.

Ниже показан пример вызова из метода Метод числовой параметр из диа пазона 128-256.

Basic Метод вызывающий Public Sub If <= 12 Then > End If End Sub Visual C# void { 12 ) MyServiceCont ExecuteCornmand else 24 ) ExecuteCornmand } пример демонстрирует, как можно переопределить метод поместив в блок для исполнения различных задач в зависимо сти от параметра, передаваемого методом Visual Basic Protected Overrides Sub command As Integer) Dim FS As New Dim SR As New If 200 Then Morning") Elself command = 220 Then Создание Windows и ими Evening") End If Sub Visual C# protected override { FS new SR - new == 200) { SR.FlushO;

} else if { SR.FlushO;

Метод экземпляра позволяет получать список работаю щих на компьютере служб:

Visual Basic Imports Module Sub As New Dim services As ServiceControllerO services = GetServicesO Dim enumerator As = While End While the key to exit") End Sub End Module 5 Управление _ _ _ _. _ _ Visual using System;

using namespace { /// /// Summary description for /// class { /// /// The main entry point for the application.

[STAThread] static void Main(string[] args) MyServiceController = new enumerator while { Console.

} to Перед установкой на компьютер приложение служб, скорее всего, придется настра и отлаживать. Этому вы научитесь на занятии 6.

ЯП Создание и ими Занятие 6. Настройка и отладка служб Создав и установив службу Windows, вы получите возможность динамически изменять ее свойства. Инфраструктура Framework для служб Windows ряд динамических свойств, которые позволяют изменять такие параметры, как и не требуя кода. Отладив служ бу, вы сможете гарантировать корректное исполнение приложением служб всех предус операций.

Изучив материал этого занятия, вы сможете:

динамически настраивать службы Windows;

отлаживать службы Windows.

Продолжительность занятия — около 20 минут.

Настройка службы Службы Windows способны взаимодействовать с различными ресурсами, такими как журналы событий, счетчики производительности и соединения с БД;

код помешают в класс Service. Чтобы службу использовать другой журнал со бытий, счетчик производительности или сервер БД, необходимо изменить код прило жения службы, а это потребует его перекомпиляции. Более того, придется удалить жнюю версию службы, чтобы заменить ее новой версией. В силу этих причин техничес кое сопровождение службы сильно усложняется, если используемые ей внешние ресур сы часто меняются.

Framework предоставляет конфигурационные упрощающие сопровож дение служб. Эти файлы содержат значения свойств и позволяют динамически настра ивать службу, не требуя перекомпиляции ее приложения. приложение служб имеет не более одного конфигурационного файла. Изменяя значения свойств в конфи файле, вы сможете приложению служб другие параметры. На пример, изменив в конфигурационном файле свойство, определяющее соединение с БД, вы тем самым разрешите службе подключиться к другой БД. Сделать свойство динами ческим можно в окне Properties во время разработки. На рисунках ниже показано, как ределить динамическое свойство, задающее используемый счетчик производительности.

Настройка и отладка tey 1.

E сделать свойство динамическим, Visual Studio добавит к приложению службы код, во время выполнения считывать значения свойств, опреде ленные в конфигурационном файле. Вот пример этого кода:

Visual Basic Dim As = New = CType( String) = CType( Visual - new = Если вы определите Visual Studio создаст конфигура ционный файл с парами «ключ — значение» для каждого динамического свойства. Ниже показан пример конфигурационного файла, созданного в результате определения свойств CategoryName и CounterName, задающих счетчик производительности, как ди намических.

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

Отладка служб Windows Чтобы отлаживать службу Windows, запустите ее и подключите отладчик к процессу, в котором работает эта служба. Отладка служб в среде Visual Studio ЕТ по нажатию кла виш F5 или либо через меню Debug невозможна по двум причинам. Во-первых, чтобы запустить службу, прежде необходимо добавить к ней установочные компоненты и установить ее приложение. Во-вторых, служба и Visual Studio выполняются в разных контекстах безопасности.

Подключив отладчик к процессу, в котором работает служба, вы сможете использо вать любые стандартные средства отладки Visual Studio такие как точки прерыва ния и пошаговое выполнение кода. Чтобы подключить отладчик к процессу службы, сделайте Запустите службу при помощи 2. В меню Debug щелкните Processes — откроется диалоговое окно Processes (рис.

3. Установите в этом окне флажок Show System Processes.

. - Рис. 2-18. Диалоговое окно Processes 4, Выберите процесс, в котором работает ваше приложение служб, и кнопку Attach — откроется диалоговое окно Attach To Process (рис. 2-19).

5. Пометьте флажок Common Language Runtime, щелкните OK, чтобы назначить от ладчик, и закройте окно Attach To Process.

Настройка и Рис. 2-19. Диалоговое окно Attach To Process После закрытия окна Attach To Process приложение службы переходит в режим от ладки, а среда разработки подключается к нему как отладчик. Подключение отладчика приостанавливает выполнение службы, Сведения об отладчиках, подключенных к раз личным службам, отображаются в диалоговом окне Processes (рис. 2-20).

Рис. 2-20. Вид окна после подключения отладчика к процессу После этого в коде приложения службы можно устанавливать точки прерывания.

Для отладки методов приложения применяют с которого службе отдают команды Stop, Pause и Continue.

Подключив отладчик к приложению службы, вы сможете отлаживать только методы OnContinue и OnStop;

методы и Main при этом отлаживать нельзя, так как служба запускается до подключения отладчика к ее приложению. Для отладки этих методов к приложению служб добавляют тестовую службу. Далее устанавливают обе службы и запускают тестовую службу, чтобы загрузить процесс, служ бы. После того как тестовая служба вапустит процесс, воспользуйтесь меню в Visual Studio для подключения отладчика к этому процессу.

34 Создание Windows и Глава Резюме • Службы Windows позволяют выполнять в фоновом режиме различные на пример вести мониторинг использования БД. Служба Windows работает в собствен ном процессе и не имеет пользовательского интерфейса. Для создания приложений служб применяют классы Base, ServiceProcesslnstaller, и Service Controller, определенные в пространстве имен • Чтобы создать службу, откройте новый проект Visual Basic или Visual на основе шаблона Windows Service. Этот шаблон автоматически генерирует код метода Main приложения служб и вставляет заголовки методов и OnStop. Чтобы наделить приложение необходимой функциональностью, методы OnStart и OnStop. Кроме сконфигурировать службу в соответствии со своими потребностями можно, изменив свойства ее приложения или переопределив методы и OnContinue.

• Службы способны обрабатывать свои события. При желании можно позволить служ бе регистрировать изменения ее состояния и сбои в системном журнале событий.

Разрешается также создавать пользовательские журналы событий для записи инфор мации о работе службы. Все это позволяет наблюдать за работой приложений служб.

• Перед запуском службы требуется ее приложение на компьютер. Для этого к приложению служб добавляют установочные компоненты, после чего устанавли вают с утилиты Установочные компоненты записывают при ложение служб на компьютер и регистрируют его, а также устанавливают и настраи вают используемые службой ресурсы, например счетчики производительности и жур налы событий. Кроме того, установочные компоненты позволяют назначить прило жению служб контекст безопасности.

• После установки созданной службы можно вести ее мониторинг и управлять ее по ведением, допустим, изменять состояние службы. Это делают вручную, при SCM или программно, через экземпляр компонента ServiceController, добавленный к приложению служб.

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

Создание и службой Практикум 2. Создание и управление службой Windows Задачи практикума;

создать и установить службу Windows, создать клиентское приложение для этой службы и Windows-приложение для управления служ бой, на локальном или компьютере. задач этого практикума можно найти в каталоге \Solution на прилагаемом компакт диске.

Продолжительность практикума — около 60 минут.

Упражнение Создание и установка службы Windows Сейчас вы создадите и установите приложение которое содержит службу DBWriter. При запуске служба создает два файла, и Customers.db. Клиентское приложение записывает сведения о покупателях в файл и может запрашивать у службы фиксацию или откат записи сведений о покупателе в файл Если клиентское приложение запрашивает фиксацию служба ter переписывает сведения о покупателях из в файл Custo mers.db и удаляет содержимое Если же клиентское приложе ние запрашивает откат DBWriter удаляет из файла все записи, не сохраняя их в Customers.db.

На разных этапах работы служба DBWriter записывает в пользовательс кий журнал событий Transaction Log и ведет учет зафиксированных транзакций при помощи пользовательского счетчика производительности Ctrl из категории При остановке служба DBWriter удаляет файл Transaction.tmp и устанавливает счетчика в 0.

Создание приложения TransactionService со службой DBWriter Запустите Visual Studio и в меню щелкните New Project.

2. На панели Project Types выберите Visual Basic Projects или Visual Projects.

3. Выберите шаблон Windows Service.

4. В поле Name введите TransactionService.

5. Измените имя файла (Service.cs) на (DBWriter.cs).

6. В Solution Explorer щелкните правой кнопкой DBWriter.vb (DBWRiter.cs) и выберите команду View чтобы вызнать дизайнер компонентов.

7. Щелкните правой кнопкой окно Component Designer и в контекстном меню выбери те Properties.

8. Измените значения Name и с на DBWriter;

свойство AutoLog в False.

9. В Solution Explorer правой кнопкой проект TransactionService и в кон текстном меню выберите Properties. Сделайте DBWriter стартовым объектом (Startup Примечание Это требуется только для проектов на Visual Basic gg служб Windows и Глава 10. Чтобы увидеть код класса Service службы щелкните кнопкой окно Component Designer и в контекстном меню выберите View Code. В Main будет код:

Visual Basic ServicesToRun = New {) Visual ServicesToRun new { Service1() };

С помощью Search and Replace замените строку Servicel на DBWriter.

12. Перетащите с панели Components в окно дизайнера компонент Log.

13. Назначьте свойству Log значение Transaction Log, а свойству Source Transaction Service.

14. Щелкните правой кнопкой узел Performance Counters (он находится пол узлом Servers в окне Server Explorer) и в контекстном меню выберите Create New Category. В окне Performance Counter Builder введите в поле Category Name строку Щел кните кнопку New и измените имя CounterName на Ctrl. Оставьте счетчику тип по умолчанию затем щелкните ОК, чтобы создать категорию My Counters и счетчик 15. Перетащите счетчик Ctrl в окно дизайнера. Назначьте свойству зна чение (точка), а свойство ReadOnly установите в False.

в класс DBWriter следующий код:

Примечание Не забудьте добавить к классу DBWriter директиву Imports fusing Basic Protected Overrides Sub args() As String) Создать временный файл и закрыть ею Dim tfs As = tfs.Close() Создать файл если он еще не создан If Not Then cfs As FileStream = End If Сделать запись в пользовательском журнале событий service started on + End Sub Protected Overrides Sub Удалить файл для счетчика производительности значение О и управление службой Windows - О Сделать запись в журнале событий service stopped on + End Sub Protected Overrides Sub command As Integer) If 201 Then = 200 Then If End Sub Private Sub Создать для чтения файла Dim sr As New Создать объект StreamWriter для записи в файл Dim sw As New Закрыть файлы значение счетчика и сделать запись в EventLog service committed a & _ "transaction on + End Sub Private Sub RollbackO service rolled back a & "transaction on + End Sub Private Sub ' Удалить содержимое Dim fs As New fs.CloseC) End Sub Создание Windows и ими protected override void args) { // Создать временный файл транзакций и закрыть его tfs = // Создать файл db. если он еще не создан if File.

{ FileStream File.

} // Сделать запись в пользовательском журнале событий service started on + } override void { // Удалить файл // для счетчика значение О 0;

// Сделать запись в пользовательском журнале событий event service stopped on + protected override void command) if (command == else if (command 200) private void { // Создать объект для чтения из файла sr new FileStream \\Transact ion.

// Создать объект для записи в файл StreamWriter sw new Практикум Создание и службой Windows // Закрыть файлы // значение счетчика и сделать запись в t committed a transaction on + System.

private void { service rolled a transaction on + System.

\ private void { // Удалить содержимое FileStream fs -new fs.FlushC):

} 17. Добавьте установочные компоненты для журнала событий, счетчика ности и службы. Для этого щелкните правой кнопкой нужный ресурс и в контекст ном меню выберите Add или выделите ресурс и гиперссылку Add Installer в нижней части окна свойств компонента.

Окно Component Designer содержит класс с добавленными объектами и Установите свойство Account объекта LocalSystem.

20. Скомпилируйте решение, чтобы создать сборку Установите сборку, в командной строке Visual Studio ко манду:

22. Убедитесь, что служба успешно установлена, и запустите ее при Вызовите Event Viewer событий) и убедитесь, что журнал Transaction Log установлен корректно. Проверьте также, делает ли служба DBWriter записи в журнале Translation Log.

23. Удостоверьтесь, что служба DBWriter при запуске создает файлы и а при остановке — удаляет файл служб и ими Глава Упражнение Создание клиентского приложения Ваша задача — создать которое будет записывать све дения о покупателях в файл и отдавать пользовательские ко манды службе DBWriter.

клиентского приложения Вызовите окно New Project из меню 2. На панели Templates выберите шаблон Windows 3. В поле Name введите 4. В Explorer откройте проект TransactionClient и переименуйте файл Forml.vb в (CustomerForm.cs).

5. Откройте форму CustomerForm в окне дизайнера.

6. Измените ее свойства Name и Text на CustomerForm.

7. Щелкните правой кнопкой имя проекта в Solution Explorer и в контекстном меню выберите Сделайте форму CustomerForm стартовым объектом (Startup Object).

Примечание Это требуется только для на Basic 8. Щелкните правой кнопкой узел References в проекте TransactionClient и выберите команду Add Reference — откроется одноименное окно. Перейдите на вкладку прокрутите список компонентов, в нем файл Щел кните кнопку Select — будет добавлен к списку Selected Components. Чтобы ссылку на System.ServiceProcess.dll, ОК.

9. Добавьте к форме CustomerForm необходимые поля, главное меню с нуж ными элементами и установите свойства Text и Font. Примерный вид готовой фор мы показан на рисунках ниже:

Customer Создание и службой Windows 10. Задайте свойства Name для текстовых полей как как Street, City, State, Country, Zip и Tel свойство Text этих тек стовых полей оставьте пустым.

Назначьте свойству Name элементов меню значения InsertRecordMenuItem, Rollback и 12. Добавьте в класс код:

Visual Basic Imports Imports Public Class CustomerForm Inherits Здесь должен быть код, сгенерированный дизайнером компонентов Private Sub sender As e As Handles Dim record As String record = + + + + + + No. + + ' + + + + + + + + + + данные в файл Dim sw As New 92 Создание служб Windows и ими Sub Private Sub sender As e As Handles clear() End Sub Private Sub sender As ByVal e As Handles Откатить изменения в файле Dim sc As New End Sub Private Sub sender As ByVal e As EventArgs) Handles Зафиксировать все изменения файле Dim sc As New sc.

End Sub Private Sub clear() = = = = = = End Sub End Class using using using using using using и Windows using class :

{ // Здесь должен быть код, сгенерированный дизайнером private void System. EventArgs { String record:

record + + + + + + + + + + + + + + + + + + + Записать данные в файл private void sender System. EventArgs e) { // Откатить все изменения в файле sc new clear( private void sender, e) { // Зафиксировать все изменения в файле ServiceController sc new private void sender, e) Создание Windows и управление ими clear();

private void { = = V";

= = = Tel. Text: = 13. В меню Build выберите Build 14. Запустите службу если она еще не запушена, затем запустите приложение 15. Введите данные покупателя и запишите их в файл Transaction.tmp при помощи ко манды Insert меню Record. Изучите результаты фиксации или отката записи в файле Transaction.tmp. Убедитесь, что в файл сохраняются только зафиксиро ванные записи.

Вызовите Performance Monitor (Монитор производительности) и добавьте нему счетчик Ctrl из категории MyCounters, этот счетчик будет отражать рост числа за фиксированных транзакций.

Откройте Event Viewer (Просмотр для просмотра записей, сделанных уж бой DBWriter в журнале Transaction Log.

Упражнение 3. Управление службами Windows Сейчас вы создадите Windows-приложение, которое будет управлять создан ной ранее службой.

Создание приложения — контроллера службы Вызовите окно New Project из меню 2. На панели Templates выберите шаблон Windows Application.

3. В поле Name введите 4. В окне Solution Explorer переименуйте файл из проекта tionClient в ServiceController vb 5. Откройте форму в окне дизайнера.

6. Назначьте свойствам формы Name и Text значения и Service Controller соответственно.

7. Щелкните проект ServiceController в Solution Explorer правой кнопкой и в контекст ном меню выберите Properties. Сделайте форму стартовым объектом (Startup Object).

и управление Примечание Это требуется только для проектов на Visual Basic 8. Щелкните правой кнопкой узел References в проекте ServiceController и в, ном меню выберите Add Reference.

9. В диалоговом окне Add Reference перейдите на вкладку и выберите Sys Щелкните Select — компонент System.ServiceProcess.dll добавится к списку Selected Components.

Чтобы добавить ссылку на System.ServiceProcess.dll, щелкните ОК.

Добавьте к форме ServiceControllerForm нужные надписи, текстовые поля, списки, контекстное меню с необходимыми элементами и установите ее свойства Text и Font так, чтобы придать форме следующий вид:

13. Назначьте свойствам Name элементов меню значения StopMenu, Pause Menu, и соответственно. У всех элементов меню установи те свойство Enabled в False.

14. Установите свойство Text кнопки в Get Service, а свойство Name — в ton.

15. Добавьте к классу ServiceControllerForm код:

Visual Basic Imports Public Class Inherits Создание и ими Глава Private svcs As Private As Здесь должен быть код, дизайнером компонентов Private Sub sender As e As Handles = Sub Private Sub sender As ByVal e As Handles If Then svcs - "Services on the local machine" Else svcs on + Catch to find the Sub End End If = Dim sc As While sc Items.

End While End Sub Private Sub sender As ByVal e As Handles Dim sc As sc = Try sc.Start() Практикум Создание и управление + sc, + started on + _ + Catch to start + + End End Sub Private Sub sender As ByVal As Handles Dim sc As sc = + + stopped on + _ + Catch to stop + + End Sub Private Sub sender As ByVal e As Handles Dim sc As sc = + + paused + _ + Catch to pause + + service! ) End Try End Sub Private Sub sender As ByVal e As System. EventArgs) Handles Click Dim sc As sc = Try + + resumed on + _ + gg служб и ими Catch to resume + + End Sub Private Sub sender As e As Handles Dim sc As sc sc.Stop{) + + restarted on + + Catch to restart + + End End Sub Private Sub sender As Object, ByVal e As Handles It <> 0 Then Dim As Integer Dim As Integer + Floor(e.Y / End If End Sub Private Sub sc As If = Then = True = False = False = False = False = Then = False = False = True = True Практикум Создание и управление Windows Then False = True If Then = True Enabled - False End If = True End If End Sub Private Sub sender As Object, e As Handles Dim sc As sc = End Sub End Class C# using System;

using using using using System. Data;

using namespace ServiceController public class :

private void e) svcs - "Services on the local machine";

else { try { svcs = "Services on + TextBoxl.Text;

I Создание Windows и ими Глава catch to find the = return:

= sc ;

while { sc = private void sender. e) { ServiceController sc;

sc = try { MessageBox. "Service + + on + + catch Unable to start + + sender, e) { ServiceController sc:

sc try { + sc.ServiceName + stopped on + + Практикум и catch MessageBox. to stop + + service!

private void sender, e) { sc :

sc try { + + paused + + catch to pause + + private sender. System. EventArgs { ServiceController sc ;

sc try { sc. Wait + + resumed on ' + + catch to resume + + private void sender. e.

Создание служб и ими sc ;

sc { Service + + restarted on + + } catch { to restart + \ private void sender, { if 0) { int = ;

int = + (int)System, Math, Y / private void ServiceController sc ) { == { = true;

= false;

= false;

false;

= false;

} else if { = false;

= true;

= false;

Практикум Создание и управлений службой Enabled = true;

= true;

else if == false;

= true;

if = true;

ResurneMenu. Enabled - false;

= true;

private void ContextMenu1_Popup(object sender, e) { sc ;

sc = private void e) { } В меню Build выберите Build Solution.

17. Запустите приложение. Щелкните Get Services, чтобы получить список служб, на локальном компьютере. Для управления службами используйте контек стное меню приложения.

Введите имя (не удаленного компьютера и Get Services, чтобы получить список служб на удаленном компьютере. Для управления службами на уда ленном компьютере воспользуйтесь контекстным меню элемента управления ListBox.

5 Разработка служб Windows и ими Закрепление материала ниже вопросы помогут вам лучше усвоить основные темы дан ной главы. Если вы не сумеете ответить на вопрос, повторите материал соот ветствующего занятия. Ответы для самопроверки — в приложении А «Вопро сы и ответы» в конце книги.

Перечислите состояния службы.

2. Назовите типы служб Windows.

3. Как создать службу?

4. Как наделить приложение служб необходимой функциональностью?

5. Напишите код, который заставит службу при каждом запуске делать за пись в файле 6. Как записать пользовательские данные в журнал событий по умолчанию?

7. Для чего в приложение служб включают установочные компоненты?

8. Почему для установки приложения службы требуются экземпляры обоих классов, и 9. Как назначить приложению служб контекст безопасности учетной записи пользователя?

10. Перечислите административные задачи по управлению службами, няемые при SCM.

Как службу исполнять пользовательские команды?

12. Как подключить отладчик к приложению служб?

Создание и применение обслуживаемых компонентов Занятие Обзор модели СОМ+ Занятие 2, Создание и регистрация обслуживаемых компонентов Занятие 3. Использование служб Занятие 4. Утилита Component Services Занятие 5. Защита обслуживаемых компонентов Практикум 3. Создание, настройка и управление обслуживаемыми компонентами Закрепление материала В этой главе Framework позволяет создавать обслуживаемые компоненты для со службами автоматическое управление со здание пулов объектов и активизацию по запросу. У обслуживаемых об контекст с приложениями что позволяет компонентам вызывать службы В этой главе вы познакомитесь с основами программной СОМ+, научи тесь создавать и регистрировать обслуживаемые компоненты, использовать службы а также управлять обслуживаемыми компонентами с помощью утилиты Compo nent Services. Кроме того, вы узнаете, как с помощью ролей и уровней безопасности предоставлять доступ к обслуживаемым компонентам только уполномоченным пользо вателям.

Прежде всего Для изучения материалов этой главы вам потребуются:

• базовые навыки программирования на Visual Basic или Visual • базовые знания • установленный Server 2000.

Примечание Бесплатную пробную версию Microsoft Server 2000 можно загрузить с Web-узла по адресу http://www.microsoft.com/sql.

Создание и компонентов Обзор программной модели предоставляет инфраструктуру для создания и развертывания распределенных многоуровневых приложений, а также службы, создавать надежно защи щенные масштабируемые приложения. Это занятие посвящено программной модели и службам Изучив материал этого вы сможете:

описать преимущества программной модели понять, что представляют собой службы СОМ+.

Продолжительность занятия — около 30 минут.

Эволюция СОМ+ В программной модели компонентных (Component Object Model, COM) был впервые реализован компонентный подход к разработке ПО. Этот подход позволял со здавать компоненты — небольшие, рационально сконструированные автономные моду ли, пригодные для многократного использования. Из них можно было собирать приложения- К сожалению, компоненты СОМ не поддерживали развертывание через сеть. Чтобы устранить это ограничение, Microsoft усовершенствовала программную мо дель СОМ и создала ее распределенный вариант — DCOM COM). В этой модели развертывание через сеть уже допускалось, что облегчало создание распределенных приложений для разных платформ. Среди прочего, вместе с DCOM программисты получили возможность создания двухуровневых ных приложений.

архитектура уровни клиента и БД. Уровень клиента состав ляют приложения, которые предоставляют интерфейс и код, реализу ющий бизнес-логику и доступ к данным. Уровень БД предоставляет данные приложе ниям клиентского уровня. Такая архитектура позволяет распределить нагрузку по обра ботке информации между несколькими компьютерами. Тем не менее двухуровневой архитектуре присущи некоторые ограничения:

• клиентские приложения неспособны к совместному использованию кода, реализую и доступ к данным, что ограничивает возможности многократ ного • любые изменения бизнес-логики потребуют внести изменения в код клиента, после чего приложение придется заново компилировать и развертывать;

• каждому клиентскому приложению необходимо отдельное соединение с сервером БД, поэтому число клиентов, одновременно работающих с сервером БД, ограничено;

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

Схема двухуровневой архитектуры приложения показана на рис. 3-1.

Двухуровневая архитектура упростила совместное использование ресурсов и данных, но не устранила всех недостатков. клиентский компьютер по-прежнему отвечал за обработку данных, а сервер, по сути, был лишь диспетчером трафика, за об меном данными между клиентом и сервером. Все это обостряло проблему доступности 10?

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

Второй уровень База для Первый и бизнес-логики Рис. Двухуровневая архитектура приложений Несколько позже Microsoft разработала архитектуру Windows Distributed Applications (WinDNA), лишенную недостатков двухуровневой архитектуры.

ра Windows DNA сделала возможной трехуровневую архитектуру приложений, в кото рой код, реализующий бизнес-логику и доступ к данным, вынесен в отдельные ненты, получившие название бизнес-объектов. Отделение клиентского приложения и кода для доступа к данным позволяет обойтись без повторной компи ляции и развертывания клиентского приложения после изменения его кода. Кроме того, благодаря бизнес-компонентам клиентские приложения получили возможность совме стного использования кода бизнес-логики и доступа к данным. Компоненты трехуров невой архитектуры показаны на рис. 3-2.

Windows DNA предоставляет со следующими службами, щими создавать и развертывать приложения с трехуровневой архитектурой:

• службы представления — поддерживают HTML, DHTML, языки и функ ции Win32 API, применяемые при разработке клиентских приложений, например Windows- и Web-приложений;

• прикладные службы — предоставляют необходимую инфраструкту ру, такую как механизмы автоматического управления транзакциями и сообщений. Включают Microsoft Internet Information Server (IIS), службы компонен тов (COM+) и Microsoft Message Queuing • службы для работы с данными — включают ActiveX Data Object и DB, позволяют бизнес-объектам и клиентским приложениям работать с серверами БД;

• системные службы — обеспечивают безопасное взаимодействие приложений через сети;

к их числу относятся службы каталогов, сетевые службы, а также защитные и коммуникационные службы.

Создание компонентов Третий уровень База данных Второй уровень Бизнес-логика Механизмы Первый уровень Рис, 3-2. Трехуровневая архитектура приложений, Службы компонентов СОМ+ СОМ+ — это прикладные службы, создавать и развертывать биз нес-компоненты, которые занимают второй уровень трехуровневой архитектуры. СОМ + набор служб, рутинные задачи, что позволяет разработчи ку на бизнес-компонентах приложения. предоставляет службы очередей (Queued Components, зашиты, слабосвязанных со бытий events, LCE), по запросу и пулов объектов.

Службы транзакций Транзакция — это набор действий, исполняемых как единая операция. Лю бая транзакция начинается исполнением первого действия и заканчивается после ус пешного исполнения всех ее действий. В случае неудачного завершения любого из действий вея транзакция считается завершившейся неудачно. Следователь но, вся транзакция исполняется успешно или не исполняется Сбой любого эта па транзакции, препятствующий его завершению, считается сбоем транзакции в целом.

Компоненты которые вы создаете, способны автоматически участвовать в тран закциях;

явно объявлять начало и конец транзакции в коде таких компонентов не тре буется.

Объект, который создается компонентом +. активируется вызовом метода предоставленным моделью СОМ+. Далее выполняются операции, со транзакцию, после чего объект деактивируется при помощи метода Com Занятие 1 Обзор программной mitTransaction или в зависимости от успешного неудачного завер шения Метол AbortTransaction выполняет откат транзакции, вызывая ме тод Все транзакции (и приложения, их обладают четырьмя характерны ми свойствами, называемыми также атомарностью (Atomicity), со изоляцией (Isolation) и устойчивостью • Атомарность. Гарантирует исполнение как неделимой единицы.

ное завершение транзакции означает неудачное завершение всех составляющих ее действий. Рассмотрим для примера, как работает банкомат. Клиент сможет снять и получить запрошенную им сумму, если на его счету достаточно денег (транзакция завершится успешно), в противном случае банкомат не выдаст деньги (транзакция завершится неудачей). В последнем случае выполняется полный откат транзакции, а банкомат отображает предыдущее предлагая пользователю запустить другую транзакцию.

• Согласованность. В составе одной транзакции может быть несколько операций, мо данные. транзакции обеспечивается путем конт роля совершаемых модификаций, гарантируя восстановление исходного состояния данных в случае неудачи транзакции. Так, в банковской БД постоянно ются все операции как по внесению, так и по снятию денег со счета клиента.

• Изоляция. Гарантирует, что при одновременном обращении нескольких к одним и тем же данным изменения, вносимые некоторой транзакцией, не будут видны другим транзакциям до ее завершения. Например, операции зачисления и списания средств со счета могут одновременно, но отображаться будет лишь актуальный баланс, результаты завершенных транзакций.

• Это свойство обеспечивает восстановление данных в любой поэтому все изменения, вносимые в данные в ходе транзакций, регистрируются на случай отказа системы.

Службы Queued Components Служба Components из СОМ+ основана на модели — службы уровня, асинхронный обмен при помощи именованных очередей. Система ставит вызовы методов в очередь и автоматически выполняет их, как только запрошенный компонент становится доступным. Таким образом, компо ненты с поддержкой очередей обеспечивают исполнение клиентских методов даже при переходе компонента в автономный режим или при отключении от сети, гарантируя бесперебойную работу распределенного приложения.

Специальный атрибут позволяет программно настраивать компоненты для чтения или записи в очереди сообщений, после развертывания компонентов СОМ+ это можно сделать при утилиты Component Services.

Службы безопасности СОМ + предоставляет систему зашиты на основе ролей, упрощающую администрирова ние компонентов среднего уровня, В реализованы два типа защиты на основе ролей: и программная (императивная). Защита, которую можно ить без явного использования программного интерфейса, называется (declarative security). Однако некоторые ситуации, такие как передача через сеть кон фиденциальных данных, требуют временного усиления мер безопасности, которое воз можно лишь с применением программного интерфейса. Такая защита называется про и применение (programmatic security). механизмы обычно применяются при про верке подлинности и управлении доступом.

Слабосвязанные события позволяет приложениям уведомлять об изменении своего состояния посредством событий. Подобные уведомления предоставляют сведения о приложениях и компонен тах, но никак не их. рассылающие уведомления, назы ваются издателями (publishers), а их объекты — подписчиками (subscribers).

События являются слабосвязанными поскольку в этой модели издатели передают в хранилища событий, которое подписчики затем про сматривают в поисках необходимой информации.

Службы активизации по запросу по запросу activation) гарантирует, что у клиентского прило жения всегда будут ссылки на необходимые объекты, пока они ему нужны. Это также означает, что клиентское приложение не будет хранить ссылки на объекты в памяти сервера, которая является ресурсом.

Компонент может пребывать в одном из трех состояний: «активен», «неакти «не существует». Создавая объект СОМ+, клиент в действительности получает ссылку на контекст объекта, а не на реальный объект. Ссылка на сам объект компонен та предоставляется, только когда клиент вызывает метод компонента. Компонент + может оставаться даже если клиент no-прежнему удерживает ссыл ку на него, поскольку экземпляр компонента создается только при вызове его метода клиентом. После завершения вызова объект деактивируется и освобождается, а при но вом вызове — Поэтому, хотя клиенту кажется, что он работает с одним и тем же в действительности успевает создать за это время не сколько экземпляров данного класса.

Пулы объектов СОМ+ также предоставляет автоматизированную службу, позволяющую так настроить компонент, чтобы получить пул из нескольких готовых к использованию и акти вированных его экземпляров для обработки клиентских запросов. Чтобы создать пул и наблюдать за ним, необходимо указать его параметры, такие как размер и тайм-аут зап роса на создание. Служба пулов объектов СОМ+ управляет пулом, а также отвечает за активизацию и повторное использование его объектов согласно заданным параметрам.

Объекты в пуле не уничтожаются даже после освобождения их клиентским прило жением. СОМ+ сохраняет освобожденный объект в пуле, чтобы повторно использовать его для обработки запроса, поступившего от этого же или другого клиента. Пулы объек тов улучшают масштабируемость приложения, обеспечивая многократное использова ние объектов Таким образом, пулы объектов экономить ресурсы при многократном одинаковых объектов. В табл. 3-1 перечислены доступные раз работчику службы СОМ+.

Обзор модели Табл. 3-1. Службы СОМ+ Служба Назначение Автоматическая обработка Применение декларативных функций обработки Взаимодействие с ХА Поддержка модели обработки Управление параллельной обработкой Разделяемые Поддержка совместного использования состояния объектами внутри серверного процесса Защита на основе ролей Применение разрешений модели безопасности, основанной на ролях Компоненты с поддержкой Асинхронная обработка очередей очередей Пулы объектов Создание и управление пулами готовых объектов Конструктор объектов Передача экземпляру класса строковой константы во время его создания Слабосвязанные события Управление событиями объектов Активизация по запросу Активизация объекта при вызове метода и после завершения вызова Компенсирующие диспетчеры Обеспечение атомарности и устойчивости ресурсов, ресурсов (Compensating не транзакции resource managers, Интегратор COM Инкапсуляция доступа к приложениям CICS и IMS (COM transaction integrator, компании IBM в объекты автоматизации 1 о Создание и применение компонентов Глава I Занятие 2. Создание и регистрация обслуживаемых компонентов Framework позволяет создавать обслуживаемые компоненты, способные исполь зовать сервисы СОМ+. Такие компоненты работают в управляемой среде Framework и используют контекст с приложениями СОМ+. На этом заня тии вы научитесь создавать обслуживаемые компоненты и регистрировать их для досту па к встроенным службам СОМ+.

Изучив материал этого занятия, вы сможете:

что необходимо чтобы добавить компонент к приложению СОМ+;

создать обслуживаемый компонент;

зарегистрировать обслуживаемый компонент в вручную.

динамически и программно.

Продолжительность занятия — около 40 минут.

Создание обслуживаемых компонентов Framework позволяет создавать компоненты с использованием языков программирования и развертывать их в виде приложений ис пользованию общего контекста с приложениями СОМ+, таким компонентам доступны все например автоматическое управление транзакциями и пулы объек тов. Типы, необходимые для работы со службами СОМ+, находятся в пространстве имен а компоненты происходят от класса Sys Для создания обслуживаемого компонента объявляют класс, производный от cedComponent. В качестве примера ниже приведен код класса Account, производного от класса Visual Basic Imports Public Class Account Inherits ServicedComponent Shared Sub Main() End Sub End Class Visual using public class Account ServicedComponent static void 2 Создание и компонентов Атрибуты обслуживаемых компонентов Обслуживаемые компоненты могут вызывать службы при специальных атрибутов из пространства имен System. У некоторых из них есть зна чения по умолчанию, зная которые, можно правильно подобрать атрибуты для обслу живаемого компонента. При помощи атрибутов, связанных со службами, задают:

• область действия атрибута — определяет, применяется ли некоторый атрибут к мето ду, классу или ко всей сборке;

• значение параметра в отсутствие атрибута — значение, которое присвоит полю, если определение атрибута отсутствует в коде;

• атрибута по умолчанию — его СОМ+ если атрибут в коде имеется, но его значение не задано.

В фрагменте кода к классу Account применяют атрибут ActivationAttribute, не задавая для него какое-либо значение. В результате назна чает атрибуту значение Visual Basic Imports Public Class Inherits Shared Sub End Sub End Class C# using [ Just public class Account ;

{ static void Main() Если же атрибут JustlnTimeActivationAttribute вовсе опустить, присвоит ему значение False.

Для конфигурирования обслуживаемых компонентов Framework предоставляет атрибуты.

• — задает параметры безопасности для обслуживае мого область действия — сборка;

в определения атрибута равен значение по умолчанию — • — определяет, где будет выполняться компонент — в системном процессе или в процессе его создателя;

область действия — сборка;

значения по умолчанию не имеет, в отсутствие атрибута прини мает значение Library.

• — задает глобально уникальный идентификатор при ложения, содержащего обслуживаемые компоненты;

область действия — сборка;

значения по умолчанию не имеет, в отсутствие определения атрибута равен сгенери рованному Создание и применение обслуживаемых Глава • — указывает имя обслу живаемые компоненты;

область действия — сборка;

значения по умолчанию не име ет, в отсутствие атрибута равен имени сборки.

— определяет, может ли обслуживаемый компонент счи тывать сообщения из очереди;

область действия — сборка;

по умолчанию и в отсут ствие значения не имеет.

• — применяется к методам класса обслуживаемого компонента;

определяет, разрешено ли методу автоматически вызывать SetComplete или Если этот атрибут установлен в True и метод завершается без ошибок, автоматически вызывается в противном случае вызывается В отсутствие оп ределения атрибута равен False, значение по умолчанию — True.

• — применяется к классам, разрешает проверку удо стоверений безопасности при вызове методов. В определения атрибута равен False, значение по умолчанию — True.

• — применяется к классам обслуживаемых компонентов, по зволяет передавать параметры контекста из интегратора транзакций COM в контекст СОМ+. — это набор инструментов и служб, позволяющий ин капсулировать транзакции мэйнфреймов, а также бизнес-компоненты в оболочки из компонентов СОМ. В отсутствие определения атрибута равен False, значение по умолчанию — True.

• — позволяет передавать значения для инициализации и настройки объекта извне, не их в коде класса. Область действия — класс.

В отсутствие определения атрибута равен False, значение по умолчанию — True.

• — описательный атрибут, содержит сведения о сборке, классе, методе или интерфейсе, которому он назначен. По умолчанию и в отсутствие опре деления значения не имеет.

• — применяется к классам;

объявляет класс как класс события (не обрабатывает вызовы своих методов самостоятельно, а передает их классам, подпи савшимся на уведомление о данном событии). По умолчанию и в отсутствие опреде ления значения не имеет.

• — разрешает регистрировать события класса, к которо му применяется. В отсутствие определения атрибута равен False, значение по умол чанию — True.

• — задает тип доступной классу, к которому приме няется. В определения атрибута равен False, значения по умолчанию — и Timeout. Подробнее об этом атрибуте — в занятии 3.

• — применяется к классам. Разрешает активизировать по запросу объекты класса, к которому применяется. Активизация по запросу позволя ет создавать объекты в неактивном состоянии, то есть только их контексты. Подоб ный объект активируется только при вызове его метода, а по завершении метода — деактивируется. Если вы задали активизацию по запросу с помощью данного атри бута, не отключайте ее утилитой Component Services. В отсутствие определения ат рибута равен False, значение по умолчанию — True.

• — разрешает создать и сконфигурировать пул объектов класса, к которому применяется. Если поддержка пулов активна, запрошенные клиентами объекты генерируется не «с нуля»: СОМ+ поддерживает пул этих объектов и при необходимости активирует объект из пула. более не нужные клиентам, воз Занятие 2 и регистрация вращаются в пул. В отсутствие определения атрибута равен False, значение по умол чанию — True.

• — определяет, участвует ли компонент в балансиров ке нагрузки, если на сервере установлена и работает служба распределения нагрузки на компоненты. В отсутствие определения атрибута равен False, значение по чанию — True.

• Client Attribute — применяется к классам, разрешает создавать объекты данного класса в контексте их создателей. В отсутствие определения атри бута равен False, значение по умолчанию — • — применяется к классам, разрешает доступ к объектам данного класса только в пределах приложения. В отсутствие определения атрибута значения не имеет, значение по умолчанию — Private.

• — применяется к сборкам, классам и методам. Обеспечивает безопасность вызова метода (методов) в пределах класса или сборки. По умолчанию и в отсутствие определения значения не имеет.

• — позволяет добавлять в приложение роли безопасности и со поставлять их с компонентами. Применяется к сборке, классу или методу. По чанию и в отсутствие определения значения не имеет.

Ниже показан пример использования некоторых атрибутов для конфигурирования обслуживаемых компонентов.

Visual Imports Imports System Imports

using ;

Создание и применение Глава using [assembly;

app contains serviced public class Account :

public void Debit() [AutoComplete] public void I Созданный обслуживаемый компонент необходимо добавить в приложение Для этого:

• назначьте сборке строгое имя;

• зарегистрируйте сборку в реестре Windows;

• зарегистрируйте и установите определения библиотек типов в приложении СОМ+.

Назначение сборке строгого имени Для назначения сборкам строгого имени используется атрибут AssemblyKeyFileAttribute:

Visual Basic Imports Public Class Account Inherits End Class Visual using public class Account :

Создать файл открытого ключа можно при утилиты Strong Name Tool о которой в главе 1.

2 и Регистрация обслуживаемых компонентов Обслуживаемый компонент можно зарегистрировать вручную, динамически или про граммно. В ходе регистрации обслуживаемые компоненты добавляются к приложению СОМ+ и конфигурируются с использованием значений, заданных атрибутами. Обслу живаемые компоненты рекомендуется с применением по скольку это повышает их гибкость. Тем атрибутам компонентов, которые не заданы явно, СОМ+ присваивает значения по умолчанию. Чтобы обслуживаемый компонент смог вызывать службы СОМ +, у него должны быть определены атрибуты:

• атрибут, приложение;

• атрибут, определяющий тип активизации для приложения;

• описательный атрибут.

Назначению приложению идентификационных данных Приложение атрибутами ApplicationName и Атрибут Application ID содержит поэтому его значение уникально и может передаваться вместе с именем приложения. Имя для приложения СОМ+ назна чают при помощи атрибута ApplicationName, действующего на уровне сборки, а иденти фикатор — атрибутом из пространства имен Любые операции поиска приложений в процессе их регистрации производятся по тификатору, который в этом случае играет роль индекса приложений. Имя ния — это идентификатор, удобный для восприятия человеком, оно не для ссылок на уровне сборки и приложения.

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

Visual Basic Imports Public Class Account Inherits Shared Sub Sub End Class Visual using [assembly:

[assembly.

public class Account : ServicedComponent { static void и обслуживаемых компонентов Гяааа Назначение типа активизации Тип определяет, где будет создан экземпляр компонента — в библиотеке процесса или в новом серверном процессе. Если приложе нию задан тип активизации зависимые сборки следует добавить в кэш глобальных сборок Assembly Cache, GAC), а параметры компонента пометить как сериализу иначе генерируются исключения. Тип активизации для приложения зада ют с помощью атрибута ApplicationActivation.

Если этот атрибут не определен, приложению назначается тип активизации, заданный по умолчанию для библиотек Вот пример назначения типа активизации для об служиваемого компонента Basic Imports assembly:

Server)> Public Class Account Inherits Shared Sub End Sub End Class Visual C# using [assembly:

public class Account : ServicedComponent { static void Main() Описательные атрибуты Для добавления к компоненту полей с описанием используемой им сборки, класса, ин терфейсов и методов используется атрибут Description. Определить этот атрибут можно через поле Description на вкладке General Properties в окне утилиты Component Services.

Подробнее об утилите Component Services — в занятии 4. Ниже показан пример назна чения описательной информации обслуживаемому компоненту Visual Basic Imports Imports Занятие 2 Создание и обслуживаемых....... _ _ _ _...... _ _ _ _ app contains serviced Public Class Account Inherits Shared Sub End Sub End Class Visual C# using using [assembly: app contains serviced components public class Account : ServicedComponent { static void Типы регистрации обслуживаемых компонентов Службы варианта регистрации обслуживаемых компонентов:

• ручная;

• динамическая;

• программная.

Ручная регистрация Чтобы зарегистрировать сборку с обслуживаемым компонентом вручную, воспользуй тесь утилитой установки RegSvcs.exe. Она принимает в качестве пара метров имя файла и сведения о метаданных сборки. Ключи, поддерживаемые RegSvcs.exe перечислены в табл. 3-2.

Ручную применяют в период разработки для выявления воз при выполнении приложения. Во время ручной регистрации сборки утилита RegSvcs.exe выполняет ряд действий, а именно:

• загружает сборку;

• регистрирует сборку;

• генерирует библиотеку типов;

• вызывает метод для регистрации библиотеки типов;

• устанавливает библиотеку типов в заданное приложение СОМ+;

• конфигурирует класс, Создание и Табл. 3-2. Ключи утилиты RegSvcs Ключ Позволяет явно передать строку имя одной библиотечной сборки.

Чтобы добавить обслуживаемые компоненты из библиотеки к приложению с именем MyFirstApp, командой:

RegSvcs.exe /с приложение в заданной сборке.

Например, эта команда создает приложение MyFirstApp в сборке RegSvcs.exe /с MyFirstApp MyFirstAssembly.dll /fc Находит приложение с именем или создает его, если заданное приложение не найдено.

позволяет найти создать) приложение MyFirstApp в сборке MyFirstAssembly.dll:

RegSvcs.exe /fc MyFirstAssembly.dll Изменяет версию сборки.

Эта команда изменяет версию сборки MyFirslAssembly.dll:.

RegSvcs.exe /fc MyFirslApp MyFirstAssembly.dll В табл. 3-3 перечислены возможные ошибки при регистрации приложений вручную.

Табл. 3-3. Ошибки при регистрации приложений вручную Ошибка Оповещение Сбой при загрузке сборки об ошибке с описанием причины сбоя Ошибка при регистрации типа Генерирует неверную сборки, что к исключению TypeLoadException Сбой библиотеки Генерирует сборки, что типов приводит к исключению TypeLoadException Невозможно вызвать метод Исключение TypeLoadException Library Утилита Regasm.exe, используемая Сообшение «One of the objects could not be found» для регистрации сборки, не может найти заданное приложение В ходе выявлено Сообщение об ошибке с причинами конфликта несоответствие атрибутов службы атрибутов службы, обычно для устранения достаточно изменить один из указанных в сообщении атрибутов Динамическая регистрация Во время динамической регистрации сборка с обслуживаемыми компонентами копиру ется в каталог приложений При вызове обслуживаемого компонента общеязыковая исполняющая среда создает его после регистрирует сборку и 2 и обслуживаемых библиотеку типов, а затем образом конфигурирует каталог регистрируемые динамически, добавлять в GAC не требуется.

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

Динамическая регистрация удобна для обслуживаемых емых с помощью атрибутов на уровне сборки.

регистрация Чтобы зарегистрировать сборку программно, создайте экземпляр класса Это запечатанный класс, в котором реализован интерфейс Вот определение класса Helper:

Visual Basic Public Class RegistrationHelper Inherits Implements Visual sealed class RegistrationHelper : MarshalByRefObject.

IRegistrationHelper Ниже показан фрагмент кода обслуживаемого компонента, проводящего банковс кие транзакции. Этот компонент состоит из клиентской и серверной частей. Класс Account является производным от это гарантирует, что хостом объектов Account будет СОМ+. В этом примере используются следующие атрибуты:

• — задает имя приложения при установке компонен тов в сборку;

• Assembly Key File Attribute — передает в каталог СОМ+ сведения о расположении стро гого имени;

• — устанавливает атрибут транзакций Required, что равносильно включению поддержки транзакций компонентом при Explorer;

• — применяется в методе Post. При возникновении исключения в ходе исполнения метода Post обеспечивает автоматический вызов метода или, если исключений не возникнет, вызов метода Ниже показан пример кода серверного компонента:

Visual Basic Imports Назначение имени приложению Создание и ' Назначение строгого имени сборке Public Class Account Inherits Public Sub As amount As Double) ' Если возникнет исключение, вызвать SetAbort, ' в случае автоматически вызвать SetComplete.

End Sub End Class Visual using using System. Runtime.

using // Назначение имени приложению // Назначение строгого имени сборке public class Account : ServicedComponent { public Post(int double amount) { // Если возникнет исключение, SetAbort, // в противном случае автоматически вызвать SetComplete.

return false;

А вот пример кола клиентского компонента:

Visual Basic Public Class Client Shared Sub Dim Account As New Account() Перевести деньги на счет 100) End Sub End Class Занятие и регистрация Visual C# public class Client < public static int Account act = new // Перевести деньги на счет 100);

return 0;

Чтобы скомпилировать серверный и клиентский компоненты, введите в строку и исполните следующие команды:

Visual Basic sn ??k MyKey.snk vbc /t:library /nSystem.

vbc sn /t: library /t:library и применение Занятие 3. Использование служб СОМ+ На этом занятии вы научитесь конфигурировать обслуживаемые компоненты для ис пользования служб при атрибутов.

Изучив материал этого занятия, вы сможете:

выбрать атрибуты, которые позволят обслуживаемому компоненту:

• начинать транзакции в приложении;

• инициировать в приложении активизацию по запросу;

• поддерживать слабосвязанные события;

• использовать пулы объектов;

• обращаться к очередям • поддерживать службу создания объектов.

Продолжительность занятия — около 45 минут.

Применение транзакций в Чтобы упростить процесс покупок через Web, сайты интернет-магазинов используют модель электронной коммерции. В операция покупки через Web включает такие этапы, как выбор товара, заполнение заявки и выбор формы оплаты. Если клиент ре шил воспользоваться кредитной картой, этап проверки ее реквизитов. Вы полнение каждого нового этапа начинается лишь после успешного завершения преды дущего, и если хоть один этап завершится неудачей, отменяется вся операция. То есть вам не доставят выбранные товары, и магазин не возьмет с вас денег.

Этот пример дает представление о транзакции, как операции, состоящей из набора связанных действий, образующих единое целое. Успех или неудача транзакции зависит от результата каждого из составляющих ее действий. В модель транзакций ис пользуется для исполнения различных операций в приложениях.

Завершенная транзакция может находиться в одном из следующих состояний:

• подтверждена — все действия, составляющие транзакцию, выполнены успешно;

• подтверждение — компонент не закончил свои модификации данных, сделанные в ходе транзакции, не согласованы;

• подтверждение разрешено — компонент не закончил свои действия, но модифика ции, сделанные в ходе приведены в согласованное состояние;

• прервана — одно из действий, составляющих транзакцию, завершено с ошибкой, что привело к сбою всей Система обработки транзакций включает:

• диспетчер транзакций (Transaction Manager, TM), управляющий транзакциями. Он оповещает всех участников транзакции об итоге или откате), а так же координирует восстановление одной или нескольких систем после сбоя. В окру жении СОМ+ роль диспетчера транзакций выполняет Microsoft Distributed Tran saction Coordinator (MSDTC);

• диспетчер управляющий реализацией для ресурсов. Иначе говоря, диспетчер ресурсов — это серверный ресурс, ответственный за координацию действий, В СОМ+ роль диспетчера ресурсов часто иг рает служба Microsoft Message Занятие 3 служб * В fcisj • монитор обработки транзакций Processing Monitor, TP Monitor) ник между клиентскими и серверными необходимый для управления ресурсами, балансировки и обеспечения отказоустойчивости;

• службы ресурсов — программной модели СОМ+ и ис среды, обеспечивают работу компонентов приложения с разделяемыми данными, а также применяются для загрузки вспомогательных компонентов.

Чтобы задействовать обслуживаемые компоненты в применяют осо бые атрибуты, в какой участвуют компоненты — в новой или в уже Атрибуты, управляющие Данные атрибуты определяют требования транзакций. Являясь декларативными эти атрибуты автоматически управляют транзакциями согласно заданным бованиям. Вот их возможные значения:

• Required — позволяет создавать в компоненте СОМ+ объект, тран Во время активизации этот объект и атрибут Required определяют состоя ние транзакции кода. Если тот участвует в транзакции, объект включается в нее, в противном случае начинается новая транзакция, корне вым объектом которой становится активируемый объект;

• — гарантирует, что созданный компонентом СОМ+, станет уча стником новой транзакции в качестве корневого объекта независимо от состояния транзакции вызывающего кода;

• Disabled — указывает, что компонент не к диспетчеру ресурсов. ус тановить атрибут в Disabled, при размещении контекста объектов СОМ+ будет игнорировать требования транзакций для данного компонента, что позволит объекту использовать транзакции вызывающей стороны. Это зна чение следует применять при использовании компонентов СОМ в СОМ+, чтобы заставить компонент следовать правилам принятым в СОМ+;

• Supported — гарантирует, что объект, созданный компонентом СОМ+, станет участ ником существующей транзакции. Данное значение применяют, когда требуется, чтобы объект участвовал в транзакции стороны, не генерируя собствен ную транзакцию;

• Not Supported — объекту, созданному компонентом участвовать в транзакциях независимо от состояния транзакций вызывающего кода. Данное зна чение применяют, когда требуется запретить объекту участие в транзакциях вызыва ющей стороны и генерацию собственных транзакций. У всех компонентов атрибут TransactionsAttribute по умолчанию установлен в Not Supported.

Действие TransactionsAttribute Действие различных значений этого атрибута на обработку транзакций в СОМ+ но в табл. 3-4.

т применение компонентов Табл. 3-4. значений атрибута на обработку в СОМ+ Начинается ли Используется Будет ли объект транзакция Значение ли транзакция клиента корнем транзакции Required Возможно Да, если она Да, если у клиента нет транзакции Requires New Да Возможно Возможно Disabled Возможно Not Supported Никогда Supported Н и когда Да, если она существует Никогда Установка тайм-аута транзакции Для каждого требующего транзакций, можно задать время ожидания заверше ния (тайм-аут) транзакции, чтобы устранить конфликты, несовпа дающих значений тайм-аута. Например, подобные конфликты возникают, когда ком понент, для задан короткий тайм-аут, должен выполнять длинные хранимые процедуры, требующие много времени. Если тайм-аут транзакции не ей назнача ется общесистемный тайм-аут. Общесистемный можно задать с помощью ути литы Component Services, о которой рассказывается в занятии 4.

Тайм-аут определяют как целое число секунд. Например, следующий фрагмент кода задает для транзакции тайм-аут в Visual Isolation ;

= Timeout Visual Активизация по запросу Служба активизации по запросу позволяет создавать неактивные объекты, по сути явля ющиеся лишь контекстами объектов. Объект остается неактивным, пока клиент не вы зовет какой-нибудь из его методов, после чего исполняющая среда создает полноцен ный объект. После завершения метода СОМ+ деактивирует объект, сохраняя его текст в памяти, и объект освобождает дефицитные ресурсы, напри мер блокировки на хранилище данных. Чтобы включить активизацию по запросу, при меняют атрибут Класс, этот атрибут, яв ляется от У всех классов, настроенных для автоматического управления транзакциями, атри бут автоматически получает значение Ниже показано, как использовать класс JustlnTimeActivationAttribute:

3 служб Visual Basic Public Class Account Inherits ServicedComponent Visual C# public class Account : ServicedComponent Применение слабосвязанных событий Система событий издателям и вызывать методы и события с поздним связыванием. При этом система событий сама уведомляет тех и других, она будет доступна, и как получить к ней доступ. Такой подход снижает частоту опроса сервера для получения нужной Чтобы задействовать службу слабосвязанных событий, необходимо создать события и его приемника, причем они должны быть прямыми или косвенными потом ками класса Ниже показано, как с помо щью интерфейса события а также классов события, приемника события и из дателя поддержку службы слабосвязанных событий СОМ+.

Visual Basic Imports System Imports Imports, Imports Imports

Namespace DemoLCE Public Interface lEvent Sub As String) End Interface Public Class LCEClass Inherits ServicedComponent Implements lEvent Public Sub As String) Implements End Sub End Class Создание и применение обслуживаемых Public Class LCEEvntSink Inherits Implements Public Sub As String) Implements "Event End Sub End Class End Namespace Visual using System;

using using using using using [assembly:

namespace { public interface lEvent, void EvntMethod(string mess):

[EventClass] public class LCEClass : ServicedComponent. lEvent { public public class LCESink : lEvent { public void mess) { "Event А вот пример кода элемент управления Button под названием FireEventButton. Метод EvntMethod вызывается обработчиком события Fire Event _ _ _ _ _ _ _ * Visual Basic Public Class.

Friend As Protected Sub As Object.

e As Handles MyEvent As = is a welcome message events") End Sub End class Visual public class LCEClient :

private protected void e) { lEvent,MyEvent = (lEvent) new LCEClass():

is a welcome message for events В приведенных выше примерах представляет a LCE Client — издателя события;

LCEClient метод объекта LCECIass.

Поскольку LCECIass — класс события, реализация метода EvntMethod вызывается не из LCECIass, а из класса LCESink.

Примечание Подписать объект на уведомление о событии можно с помошью утилиты Component Services. Для этого в окне Component Services раскройте узел нужного ком понента, узел Subscriptions правой кнопкой и в контекстном меню выберите New Subscription.

Служба пулов объектов Пулы позволяют экономить ресурсы при создании объектов. В обычном окружении, не пулы, объекты создаются каждый раз при вызове их метода. Если же включена поддержка пулов, создается пул объектов, и при активизации объект извлекается из него;

при деактивации объекты в пул для последу использования. Чтобы сконфигурировать пул объектов, необходимо пометить класс, производный от класса атрибутом Вот как это делается;

Visual Basic := 1, 10.

:= _ Public Class MyPooledObject ' и применение Глава Inherits End Class MaxPoolSize=10.

public class :

Служба Queued Components Служба Components позволяет асинхронно вызывать и исполнять компоненты СОМ+. Для использования этой службы применяют класс ApplicationQueuingAttribute, производный от класса Класс Application QueuingAttribute указывает с помощью атрибута MaxListenerThreads максимальное чис ло потоков, которое может быть у компонента с очередью. Допустимый диапазон атрибута — от 0 до 1000. Ниже показано, как средствами класса задать атрибуту MaxListenerThreads зна чение 35:

.

Visual MaxListenerThreads 35 )> Visual = MaxListenerThreads = 35 )] Служба создания объектов Зачастую требуется записать информацию в класс компонента.

Служба создания объектов берет эту утомительную обязанность на себя, позво ляя инициализировать конфигурацию Чтобы задействовать службу создания объектов, примените атрибут к классу, производному от Ниже показан пример реализации класса При создании обслуживаемого компонента СОМ+ передает ему значение по умолчанию Hello.

Visual Basic Visual C# Итак, на этом занятии вы узнали, как разрешить обслуживаемому компоненту ис пользовать службы СОМ с помощь атрибутов. Конфигурировать обслужи ваемый компонент также разрешается при утилиты Component Services. Она позволяет изменять параметры управления транзакциями, активизацией, в том числе по запросу, пулами и созданием объектов. Подробнее об этом — в следующем занятии.

4 Component Services Занятие 4. Утилита Component Services Утилита Component Services позволяет свойства приложений На этом занятии вы научитесь применять ее для управления обслуживаемыми компо нентами.

Изучив материал этого занятия, вы сможете:

разобраться в возможностях утилиты Component Services;

конфигурировать обслуживаемые компоненты и управлять ими с помощью утилиты Component Services.

Продолжительность занятия — около 30 минут.

Работа с утилитой Component Services Утилита Component Services представляет собой оснастку консоли Microsoft Management Console (MMC), позволяющую создавать, конфигурировать и обслуживать СОМ+, а также просматривать системные события и управлять системными службами.

Среди прочего, утилита Component Services помогает управлять тран закциями. Component Services • настраивать системные параметры для служб компонентов, включая тайм-аут тран журналы и протоколы;

• устанавливать и конфигурировать приложения для развертывания на сторо не клиента или сервера;

• конфигурировать различные службы, такие как службы Components, балан сировки нагрузки, и обработку Службу Queued Components мож но настроить так, чтобы она запрашивала обслуживание у других компонентов.

Служба балансировки нагрузки позволяет определять в обработке ком пьютеры и компоненты, наблюдать за активностью компьютера и ис ключения. Компоненты Component Services, ответственные за настройку транзак ций, позволяют просматривать статистику транзакций и управлять их состоянием.

Как вызвать Component Services 1. Откройте Control (Панель 2. Дважды щелкните значок Administrative Tools (Администрирование).

3. Дважды щелкните значок Component Services компонентов).

Примечание Большинство компонентов, описанных в этом разделе, в Windows 2000 и ХР. Компоненты, специфичные для Windows XP, отмечены специально.

Оснастка Component Services показана на рис. 3-3.

Создание и применение Рис. Component Services В левой панели оснастки Component Services находится раскрыв которое, можно просмотреть списки служб событий и служб локального а также компонентов и безопасности компонентов +. Дерево оснастки Component Services отображает следующие узлы:

• My Computer and other computers (Компьютеры) — содержит узел My Computer (Мой компьютер), а также узлы для прочих компьютеров, добавленных администратором.

Узел My Computer соответствует локальному компьютеру, на котором утилита Component Services, и содержит узлы СОМ+ Applications (Приложения СОМ+) и Distributed Coordinator распределенных транзакций);

Applications (Приложения СОМ+) — расположен в узле My Computer, содер жит список приложений СОМ+, установленных на компьютере. Чтобы просмотреть свойства шелкните в оснастке Component Services правой кнопкой и в контекстном меню выберите Properties (Свойства). Диалоговое окно при ложения СОМ+ показано на рис. 3-4;

• (Настройка только в Windows XP) — предоставляет к утилите настройки DCOM. В Windows 2000 эту утилиту можно было вызвать только из командной набрав В Windows XP можно настраивать DCOM средствами утилиты Component Services;

• Running Processes (Работающие только в Windows XP) — данный узел ото бражается только в Windows XP и содержит список всех приложений СОМ+, в данный момент;

• Components отображает компоненты, установленные в данное при ложение СОМ+. Изменять параметры установленных компонентов СОМ+ можно через окно их свойств;

Рис. 3-4. Окно свойств СОМ+ (Роли) — отображает список ролей, доступных приложению СОМ+. Изменять параметры ролей + также можно через диалоговое окно их свойств.

На рис. 3-5 показаны узлы My Computer, Applications, Components и Roles в окне оснастки Component Services.

Рис. 3-5. Узлы в оснастке Component Services Legacy Components (Устаревшие компоненты;

только в Windows — отображает с пи сок объектов, не настроенных для использования СОМ+, но использо вать службу пула объектов Использовать эту службу могут и компоненты.

специально для этого не предназначенные, при условии, что они не участвуют в тран закциях;

Глава Создание и Interfaces (Интерфейсы) — отображает список доступных интерфейсов компонента СОМ+. Изменять параметры интерфейсов, связанных с компонентом мож но через окно свойств;

Methods (Методы) — отображает список доступных методов интерфейса. Для изме нения свойств связанных с интерфейсами компонента СОМ+, служит со ответствующее диалоговое окно. Содержимое узла Interfaces показано на рис. 3-6;

Рис. 3-6. Узел Interfaces со списком методов в оснастке Component Services Рис. 3-7. Узел Transaction Coordinator • Distributed Transaction Coordinator (Координатор распределенных со держит узлы Transaction List (Список отображающий список текущих транзакций на компьютере, и Transaction Statistics отобра жающий сведения по отдельным транзакциям. Узел Distributed Transaction показан на рис. 3-7.

Утилита Component Services позволяет различные свойства и компонентов Для приложений предусмотрена настройка параметров безопас ности, данных, параметров активизации и работы с очередями сообщений, а также дополнительных параметров, таких как завершение серверного про цесса и отладка. Для компонентов разрешается настраивать параметры ций, безопасности, активизации и параллельной обработки, а также па раметры, например работу с очередями сообщений и службой слабосвязанных событий.

Настройка активизации Настраивая активизацию СОМ+ на уровне приложения, можно указать, ли оно библиотечным или серверным (рис. 3-8).

Примечание В Windows XP отображаются две дополнительных вкладки — Dump хранение копии) и Pooling & Recycling и перезапуск).

Рис. 3-8. Настройка на уровне компонента Для компонентов разрешается настраивать атрибуты пула объектов, созда ния объектов, активизации по запросу (рис. 3-9) и поддержки событий.

и применение Г Рис. 3-9. Настройка на уровне приложения Настройка транзакций Автоматическая обработка позволяет настраивать транзакции в со ответствии с требованиями приложения.

Установка атрибута поддержки транзакций Значения атрибутов транзакций разрешается задавать вручную, при утилиты Component Services.

Установка атрибута с помощью утилиты Component Services В дереве консоли Component Services (Службы компонентов) нужный ком понент правой кнопкой и в контекстном меню выберите Properties 2. В диалоговом окне свойств компонента перейдите на вкладку Transactions (Транзак ции).

3. Выберите требуемый вариант поддержки транзакций. Значение по умолчанию для всех компонентов — Not Supported поддерживается).

4. Щелкните ОК.

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

Занятие Component Services Рис. Параметры на уровне компонента Настройка тайм-аута транзакций Утилита Component Services также позволяет задавать вручную тайм-аут транзакций.

Установка тайм-аута для отдельных компонентов локальном компьютере В дереве консоли Component Services (Службы компонентов) щелкните нужный ком понент правой кнопкой и в контекстном меню выберите Properties (Свойства) 2. В диалоговом окне свойств компонента перейдите на вкладку Transactions ции).

3. Установите флажок Override Transaction Timeout Value (Переопределить гло бальное время ожидания транзакций).

4. В поле Transaction Timeout [Время ожидания транзакций введите нужное время в секундах. Значение по умолчанию — 0, то есть компонент будет ожидать завершения транзакции неопределенно долго.

5. Щелкните ОК.

Аналогично задают общесистемный тайм-аут на локальном компьютере.

1. В дереве консоли Component Services (Службы компонентов) щелкните компьютер правой кнопкой и в контекстном меню выберите Properties (Свойства).

2. В диалоговом окне свойств перейдите на вкладку Options (Параметры).

3. В поле Transaction Timeout [Время ожидания транзакций введите нужное время в секундах. Значение по умолчанию — 60.

4. Щелкните ОК.

Вкладка с параметром тайм-аута транзакций для локального компьютера показана на рис.

и применение Рис. Настройка тайм-аута транзакций для локального компьютера Настройка системы безопасности Утилита Component Services позволяет выполнять любые задачи, связанные с настрой кой зашиты CQM+, а именно:

• настраивать защиту на ролей;

• задавать уровень проверки подлинности;

• задавать уровень олицетворения.

Конфигурирование защиты на основе ролей Прежде чем приступить к конфигурированию защиты на основе ролей в приложении необходимо определить, роли, что делается на этапе разработки.

Роль — это группа пользователей, обладающих некоторыми разрешениями в отно шении компонента или приложения которые вы определяете, можно свя с компонентами, методами и интерфейсами приложения.

Настройка системы безопасности на основе ролей 1. Разрешите проверку доступа на уровне приложения.

2. Задайте уровень безопасности для проверки доступа.

3. Разрешите проверку доступа на уровне компонента.

4. Определите роли приложения.

5. Назначьте роли компонентам, интерфейсам и методам.

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

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

Занятие Component Services Как активировать проверку доступа на уровне В дереве консоли Component Services (Службы компонентов) щелкните при ложение правой кнопкой и в контекстном меню выберите Properties ства).

2. В диалоговом окне свойств приложения перейдите на вкладку Security ность).

3. Установите флажок Enforce Access Checks For This Application про верка доступа для приложения).

4. Щелкните ОК.

На рис. 3-12 показана вкладка Security диалогового окна Properties.

Параметры защиты настроены для проверки доступа на уровне приложения.

| toi а be да tf tevrf.

The COM* is Рис. 3-12. Параметры, проверку на уровне Выбор уровня безопасности для проверки доступа Чтобы задать уровень защиты для приложения перейдите на вкладку Security и установите переключатель Security Level в нужное положение:

• Perform Access Checks At The Process Level. Security Property Not Be Included On The Object Context. Security Call Context Will Not Be Available. (Проверка только на уровне процесса. Свойство безопасности не в контекст объекта. Контекст вызова безопасности СОМ+ не будет доступен) — что пользователи — члены ролей сопоставлены с приложением и будут добавлены дес криптор защиты процесса. При выборе данного переключателя:

• отключается проверка ролей на уровне компонента, метода и интерфейса;

про верка безопасности только на уровне приложения;

свойство безопасности не включается в контекст объектов, выполняющихся в границах приложения;

Создание и применение • контекст вызова становится недоступным, следовательно, про граммная полагающаяся на его работать не будет.

• Perform Access Checks At The Process And Component Level. Security Property Will Be Included On The Object Context. The COM+ Security Call Context Is Available. (Проверка доступа на уровне процесса и компонента. безопасности включается в кон текст объекта. Контекст вызова СОМ+ будет доступен) — заставляет про верять дескрипторы безопасности на уровне процесса, а также включает полную проверку безопасности на основе ролей. При выборе данного переключателя:

• активируется проверка доступа на уровне компонента, позволяя компонентам проверять принадлежность к ролям;

• к контексту всех объектов, в границах приложения, добавляется свойство безопасности;

• становится доступным контекст вызова безопасности и активизируется программ ная защита на основе ролей.

рис. показана вкладка диалогового окна па раметры защиты настроены для проверки доступа на уровне процесса и компонента.

access Me level- a Рис. 3-13. Параметры, активирующие проверку доступа на уровне и компонента После перезапуска приложения проверка безопасности осуществля ется на заданном уровне, а доступ к приложению предоставляется только тем пользова телям, которые являются действительными членами ролей, назначенных приложению.

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

Для каждого устанавливаемого компонента по умолчанию разрешена проверка доступа на уровне компонента, при этом должна быть включена проверка доступа на уровне 4 Утилита Component приложения, а выбранный уровень защиты должен допускать проверку доступа на уров не процесса и компонента.

Как разрешить или запретить проверку на компонента В дереве консоли Component Services (Службы компонентов) найдите приложение содержащее требуемый компонент.

2. Раскройте узел приложения и найдите в узле Components (Компоненты) нужный компонент.

3. В диалоговом окне свойств приложения перейдите на вкладку Security (Безопас ность).

4. Щелкните переключатель Enforce Component Level Access Checks проверка доступа на уровне компонента).

5. Щелкните ОК.

Примечание Изменения параметров вступят в силу после перезапуска приложения.

Определение ролей для приложения Привилегии в системе безопасности приложения составляют его политику зашиты. Что бы задать привилегии в системе безопасности приложения, определите для него роль и свяжите ее с конкретными ресурсами.

Как роль к 1. В дереве консоли Component Services (Службы компонентов) найдите требуемое при ложение и раскройте узел.

2. Щелкните правой вложенный узел Roles (Роли) и выберите 3. В диалоговом окне Role (рис. введите имя новой роли.

Щелкните ОК.

Рис. Диалоговое окно Role Примечание Добавив роли в приложение, назначьте их соответствующим компонен там, интерфейсам и методам. Если, не сделав этого, включить для приложения на основе ролей, получить доступ к приложению извне будет невозможно.

Назначение ролей компонентам, интерфейсам и методам Элементам приложения СОМ+ разрешается явно назначать роли — это гарантирует, что только пользователи, принадлежащие к заданным ролям, получат доступ к прило жению.

Создание и Назначение ролей компонентам, методам и интерфейсам В дереве консоли Component Services (Службы компонентов) найдите приложение для которого определена роль.

2. его узел и найдите нужный компонент, метод или интерфейс.

3. Щелкните требуемый элемент правой кнопкой и в контекстном меню выберите Properties (Свойства).

4. В диалоговом окне свойств перейдите на вкладку Security (Безопасность).

5. В списке Roles Explicitly Set For Selected Item(s) (Роли явно установленные для выде ленных объектов) выберите роли, которые следует назначить элементу.

6. Щелкните ОК.

Выбор уровня проверки подлинности Выбирая уровень проверки подлинности, вы определяете, насколько будет производиться проверка клиента, пытающегося получить доступ к прило жению. Более высокие уровни проверки подлинности обеспечивают более надежную защиту и гарантию целостности данных.

Выбор уровня проверки для серверного приложения В диалоговом окне свойств нужного приложения перейдите на вкладку Security (Бе зопасность).

2. В раскрывающемся списке Authentication Level For Calls (Уровень проверки подлин ности для вызовов) выберите нужный уровень и щелкните Ниже перечислены возможные уровни, упорядоченные по возрастанию надежности обеспечиваемой ими защиты:

• None (Нет) — проверка подлинности не производится;

• Connect (Подключение) — подлинность удостоверений проверяется только во вре мя установления • Call — подлинность удостоверений проверяется в начале каждого вызо ва;

• Packet (Пакет) — проверяется подлинность удостоверений и получение данных вызова в полном объеме;

задано по умолчанию для серверных приложений СОМ+;

• Packet Integrity (Целостность пакетов) — проверяется подлинность удостоверений и отсутствие данных вызова во время передачи;

• Packet Privacy (Секретность — проверяется подлинность а включая данные, идентификационные реквизиты и подпись отправи теля, шифруются.

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

Как выбрать уровень 1. В диалоговом окне свойств нужного приложения перейдите на вкладку Security (Бе зопасность).

Занятие 4 Утилита Component 2. В раскрывающемся списке Impersonation Level (Уровень олицетворения) выберите нужный уровень и ОК. Ниже перечислены возможные уровни олицетво рения, упорядоченные по возрастанию надежности зашиты:

• Anonymous (Анонимное) — клиент неизвестен серверу. Сервер может клиента, не передавая сведений о нем в маркере олицетворения;

(Идентификация) — может получать учетные данные и его при проверке доступа по списку доступом Control List, ACL);

• Impersonate может олицетворять клиента и от его имени с некоторыми ограничениями. Если сервер и клиент на одном сервер обращается к ресурсам как клиент, а если сервер на другом компьютере, он может только к своего локального компьютера. Это значение задано по умолчанию для сервер ных приложений СОМ+;

• Delegate (Представитель) — сервер может олицетворять клиента и действовать от его лица независимо от того, ли они на одном компьютере или нет. В период олицетворения идентификационные данные клиента могут быть ны любому числу компьютеров.

Занятие 5. Защита обслуживаемых компонентов Проверка удостоверений безопасности — важный аспект разработки компонентных при ложений, поскольку она ограничивает доступ к данным. В СОМ+ такая проверка выполняется при пересечении процессов. Таким образом, про верка удостоверений производится в ситуациях, когда вызов, сделанный клиентом в одном процессе, адресован компоненту в другом процессе. На этом занятии вы позна комитесь с различными уровнями проверки удостоверений безопасности в Изучив материал этого вы сможете:

описать реализацию различных уровней защиты компонентов;

рассказать, чем отличаются защита на основе ролей, проверка подлинности, олицетворение и делегирование;

реализовать обслуживаемых компонентов с помощью функций API.

Продолжительность занятия — около 30 минут.

Реализация защиты обслуживаемых компонентов Одна из основных задач при разработке приложения — защита его от доступа злоумыш ленников и пользователей, не проверку подлинности. Это можно сделать программно, с помощью защитных API, либо вручную, посредством утилиты Component Services. Программная защита применяется в требующих явной реализации мер безопасности в соответствии с требованиями к приложению. СОМ+ поддерживает несколько вариантов защиты обслуживаемых компонентов:

• защита на основе ролей;

• проверка подлинности клиентов;

• олицетворение клиента и делегирование.

Защита на основе ролей Система безопасности, основанная ролях, — это гибкая автоматизированная модель защиты с широкими настройки, предоставляемая СОМ+ с целью орга низации контроля доступа к приложениям СОМ+. Эта модель является важным компо нентом системы безопасности приложений СОМ+, создание правил про верки подлинности на основе которые ограничивают доступ к приложению оп ределенным кругом пользователей или их групп. Роль состоит из списка или категории пользователей, имеющих одинаковые привилегии в системе безопасности. Когда вы назначаете роль какому-либо ресурсу приложения, все члены данной роли автоматичес ки получают право на доступ к этому ресурсу.

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

Занятие 5 Защита обслуживаемых Существует два типа защиты на основе ролей в обслуживаемых компо нентах.

• Декларативная защита на основе ролей. Позволяет объявлять и назначать роли ресур сам приложения. Роли можно назначать приложению, его компонентам, сам и их методам. Роли наследуются, следовательно, назначив роль компоненту, вы неявно назначаете ее всем интерфейсам и методам этого компонента. Декларатив ную защиту на основе ролей реализуют путем настройки параметров защиты прило жения или компонента с помощью утилиты Component Services или средствами SDK для разработки административного ПО.

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

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

основанной на ролях, зависит от того, как эти роли спроек тированы. Проектируя роли для конкретного помните следующее:

• польза ролей зависит от особенностей пользователей и данных, к которым они обра щаются. Следовательно, роли должны отражать эти особенности соответственно их в конкретном окружении. Например, проектируя систему зашиты для организации, можно положить в основу ролей ее должностную структуру. Роли мож но сопоставить должностям с учетом бизнес-правил, например, разрешить операции перевода денег или доступ к важным данным только для определенных профилей.

Однако сложность и эффективность структуры ролей в предыдущем примере стает, если сотрудники могут обладать несколькими профилями. В таких случаях при ролей берут за основу специфику данных, к которым пользователи обращаются, а не характеристики их профилей;

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

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

• имена ролей должны быть очевидными, чтобы по имени было легко установить груп пу которой роль сопоставлена;

и компонентов Глава • правила, основанные на ролях, должны быть простыми и предусматривать неболь шое число ролей;

• эти правила должны быть четко описаны в понятной администратору форме;

описание роли должно содержать сведения о ней, администратор рискует неправильно понять скудное описание роли;

• чтобы сделать роли масштабируемыми, добавляйте к ним пользовательские группы Windows;

роли, включающие отдельных пользователей, сложно редактировать и уда лять.

Проверка удостоверений в приложениях на уровне компонентов Проверка удостоверений защиты при пересечении приложения.

Если друг друга вызывают два компонента одного приложения, проверка не произво дится. Если же вызовами обмениваются компоненты разных приложений, даже если эти приложения работают в одном процессе, вызовы будут пересекать границы прило жений. В подобных ситуациях выполняется проверка удостоверений безопасности, га рантирующая, что доступ к ресурсам приложения или компонентам получат только уполномоченные пользователи. Таким образом, проверку доступа можно реализовать, поместив защищаемые компоненты в отдельные приложения СОМ+. Решение о необ ходимости проверки к зависит от свойства безопасности контекста объекта.

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

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

Информация контекста вызова безопасности При программной реализации защиты класс позволяет просматривать информацию о пользователе и, где необходимо, проверять его принадлежность к заданной роли.

Класс предоставляет описание цепочки пользователей, вы зывавших метод перед текущим вызовом, и содержит ряд свойств и методов. Свойства класса перечислены ниже.

5 Защита • — предоставляет объект с описанием вызы пользователя.

• Current Call — предоставляет объект с описа нием контекста вызова безопасности.

• — предоставляет объект с описанием пользователя, данный метод напрямую.

• Enabled — позволяет определить, разрешена ли ка безопасности текущего контекста.

• — предоставляет значение из набора ISecurityCallContext в СОМ+.

• — предоставляет значение из набора ISecurityCallContext в СОМ+.

• предоставляет объект с описани ем пользователя, первым вызвавшего данный метод.

Далее приводится список методов класса • — проверяет принадлежность пользователя, вызвавшего метод напрямую, к заданной роли, принимая ее имя как параметр. Если дала положительный результат, в противном случае — False.

• — проверяет принадлежность заданного пользователя к задан ной роли, принимая ее имя как параметр. Если проверка дала положительный ре зультат, возвращает в противном случае — Реализация защиты компонентов, основанной на ролях активна ли защита объекта, можно с помощью метода Enabled объекта SecurityCallContext. Метод перед провер кой принадлежности к роли с помощью метода IsCallerlnRole, поскольку при отклю ченной защите вернет True. Ниже показано, как с помощью метода узнать, включена ли в текущем контексте проверка удостоверений бе зопасности. Если это так, код проверит принадлежность к заданной роли.

Basic Dim As SecurityCallContext Dim SecEn As Boolean = SecEn If SecEn Then If Then ' Выполнить действие If End If Visual C# SecurityCallContext SecEn;

= SecEn if (SecEn) Создание и { if { // Выполнить какое-нибудь действие !

Набор Набор представляет объекты или пользователей, вызывающих заданный объект. Элементы набора доступны по из следующего диапазона: [0;

1]. Каждый вызывающий объект представлен объектом чьи свой ства перечислены в табл. 3-5.

Табл. 3-5. Свойства объекта Имя AccountName Содержит имя учетной записи вызывающего пользователя Service Содержит службы проверки подлинности, например или Secure Sockets Layer (SSL) Показывает использовавшийся уровень проверки подлинности;

отражает уровень безопасности взаимодействия объектов Показывает уровень заданный клиентом;

отражает объем полномочий, серверу Чтобы программно добавить роли к приложениям и связать их с компонентами, сле дует применить к классам атрибут производный от класса rise Применение к классу этого ат рибута обеспечивает включение роли в конфигурацию приложения и связывает ее с за данным Свойство позволяет указать, нужно ли добавить к роли группу Everyone. Если оно установлено в True, Everyone назначается членство в роли. По умол чанию это свойство равно False, то есть роль пуста. Ниже показаны примеры использо вания атрибута и свойства SetEveryoneAccess:

Visual Basic Public Class End Visual class MyClass ;

!

Занятие 5 Защита обслуживаемых компонентов Проверка к роли Метод класса позволяет проверить принадлежность к роли пользователя или службы, напрямую объект. Это гаранти рует исполнение некоторого блока кода, только если пользователь явля ется членом заданной роли. Например, метод SecurityCallContext. IsCallerlnRole позво ляет огранить круг пользователей, имеющих доступ к некоторым банковским данным, руководством банка. Ниже с метода клас са SecurityCallContext проверить принадлежность к заданной роли:

Visual Basic Dim as SecurityCallContext = If Then Продолжить транзакцию, Else Сообщить об ошибке.

If Visual SecurityCallContext // Продолжить else // Сообщить об ошибке.

Взаимодействие защитных служб и Framework Framework разрешает управляемым приложениям взаимодействовать с ниями это касается и защитных служб. В управление защитой осу ществляется через контекст безопасности, а настройка параметров зашиты — средства ми утилиты Component Services. Другие утилиты, такие как Tlbexp.exe, помогают сде лать объекты Framework видимыми объектам СОМ+ версии гене рирует библиотеку типов для открытых интерфейсов и регистрирует объекты;

эти входят и в процесс создания и обслуживаемых После этого объекты Framework становятся видимыми административной утилите СОМ+ 1.0, что позволяет снабдить их системой безопасности на основе ролей.

Однако возможности взаимодействия между приложениями СОМ+ 1.0 и NET Framework в плане зашиты имеют некоторые ограничения. Так, свойства КО не передаются через границы процессов, между компьютерами и в новые потоки, няющие управляемый код. Таким образом, задействовать защитные службы СОМ в управляемом коде удастся только в Windows 2000.

и Резюме • является расширением программной модели COM. COM+ основана на архи тектуре Windows DNA и предоставляет набор служб, разработку при ложений. Встроенные службы СОМ+ позволяют решать различные связан ные с технологической инфраструктурой, позволяя разработчику сконцентрировать ся на решении бизнес-задач уровня приложения.

• Компонент использующий доступные компонентные службы СОМ+, называ ется обслуживаемым компонентом. Для создания обслуживаемого компонента сле дует класс, производный от класса • Зарегистрированный обслуживаемый компонент может вызывать службы Зарегистрировать обслуживаемые компоненты можно вручную, динамически или программно. Для управления и конфигурирования зарегистрированных компонен тов применяется Component Services.

• Чтобы компонент работал в среде следует создать класс, производный от — класса, свойства и методы, необходимые для взаимодействия со службами • Программное конфигурирование приложений и компонентов СОМ+ осуществляют посредством атрибутов. Утилита Component Services позволяет напрямую изменять свойства приложений и компонентов • Если к компонентам;

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

Практикум и обслуживаемыми 3. Создание, настройка и управление обслуживаемыми компонентами Задача этого практикума — обслуживаемый компонент и приложение для него, а также научиться управлять компо нентами с помощью утилиты Component Services. Решение задач этого тикума можно найти в каталоге на прилагаемом компакт диске.

Продолжительность практикума — около 60 минут.

Упражнение Создание обслуживаемых компонентов | Л Сейчас вы создадите обслуживаемый компонент Account, производный от класса Account имитирует банковский счет и обла дает атрибутами для хранения баланса и идентификатора счета, а также дами для перевода денежных средств с одного счета на другой. Перевод осу по правилам: при переводе денег со счета А на счет В остаток на счете А по завершении транзакции должен составлять не менее 5000, а новый баланс счета В не более 25 000. Перевод может быть успеш ным только при выполнении обоих условий.

У класса Account также есть методы, позволяющие узнать баланс счета и идентификаторы всех счетов. Для хранения и управления сведениями о счетах класс Account использует БД Вы исполните сценарий, чтобы создать в базе дан ных таблицу Accounts.

Далее вы сконфигурируете компонент Account так, чтобы он использовал службы автоматической обработки пулы активизации по запросу, созда ния объектов, а также защиту на основе ролей.

Примечание Это упражнение содержит код, выполняющий ряд операций с БД. Соот ветствующие операторы описаны в комментариях. Подробнее о работе с БД с помощью — в главах 5 и 6. Основное внимание при выполнении этого упражнения следует уделять примерам кода и атрибутам, поведение компонента.

Создание класса Account Запустите Visual Studio и в меню выберите New Project.

2. На панели Project Types выберите Visual Basic Projects (Visual Projects), а на пане ли Templates щелкните Class Library.

3. В поле Name введите и щелкните ОК.

4. В окне Solution Explorer удалите из проекта BankAccounts файл (Classl.cs).

5. В контекстном меню проекта в окне Server Explorer или в меню File выберите Add New Item.

6. На панели Templates щелкните шаблон Class, в поле Name введите unt.cs) и щелкните Open.

и применение Глава 7. Щелкните проект правой кнопкой и в контекстном меню выберите Add Reference. В диалоговом окне на вкладке Add Reference Sys и (только для кода на Visual Щелкните чтобы добавить ссылки в проект BankAccounts.

8. Измените кол класса Account, как показано ниже:

Visual Basic Account Imports Imparts System Imports Imports Imports, \..

-1, False).

= integrated security=sspi;

Public Class Account Inherits Здесь хранится строка подключения Private As String Protected Overrides Sub As String) Вызывается после конструктора. Метод connectionString можно сконфигурировать на вкладке Activation диалогового окна свойств компонента Account connectionString constructString End Sub Метод, счета.

' Атрибут гарантирует подтверждение транзакции в отсутствие исключений и ее откат в противном случае.

Public Sub id As Integer, As Integer) Создаем connection для подключения к серверу БД Dim conn As New SqlConnection(connectionString) Выполняемый SQL-оператор Dim As String = "insert accounts & id & & & SQL-команда, выполняемая через соединение, необходимые Dim As New conn) соединение, чем выполнить команду, Практикум Создание, настройка и управление компонентами выполняем команду и закрываем соединение.

End Sub Метод перевода денег с одного счета на другой.

гарантирует подтверждение транзакции в отсутствие исключений и ее откат в противном случае.

Public Sub As Integer, toAccount As Integer. ByVal As Integer) Создаем подключение к серверу БД.

Dim conn As New обновляем баланс счета, с которого снимаются деньги, Dim stmt As String - "update accounts set & & where id & fromAccount Dim command As New conn) обновляем баланс счета, на который деньги перечисляются, stmt - "update accounts set & amt & where id & toAccount command = New conn) command.

новые балансы счетов, в переводе, Dim fromBal As Integer = Dim As Integer = getBal(toAccount) проверяем, что и toBal<=25000.

If fromBal 5000 And toBal <= 25000 Then Transferred Else хотя бы одно из условий не выполняется, соединение и генерируем исключение.

Throw New not transfer В результате транзакция прерывается End If ' Метод завершается и транзакция End Sub 54 Создание и применение компонентов ' Метод для получения баланса счета Public Function getBal(ByVal As Integer) As Integer Создаем объект connection для подключения к серверу БД Dim conn New Dim As String = "select from accounts where & id исполняемой через соединение Dim As New conn) Открываем соединение, выполняем запрос, возвращающий единственное скалярное значение, и присваиваем результат переменной типа getBal Integer) Закрываем соединение End Function Метод, получающий идентификаторы всех счетов из таблицы Accounts Public Function As Dim conn As New Dim stmt As String "select id accounts Dim Command As New ExecuteReader объект позволяющий последовательно считывать данные из dr As Создаем ArrayList для хранения значений идентификаторов Dim ids As New Добавляем значения а объект ArrayList While End While Return ids End Function End Class Visual using System;

using using using using using using Создание, настройка и // Удалите атрибут из файла // сгенерированного Visual Studio namespace MaxPoolSize integrated public class Account : ServicedComponent { // Здесь хранится строка подключения private String public protected override void constructString) { // Вызывается после конструктора. Метод connectionString можно // сконфигурировать на Activation диалогового окна // свойств компонента // Метод, создающий объект счета, // Атрибут гарантирует подтверждение транзакции // а отсутствие исключений и ее откат в противном случае.

public void id,int { // Создаем объект connection для подключения к серверу БД conn = new // Выполняемый string = "insert into accounts + id + + amt + // SQL-команда, через соединение, // содержит необходимые = new conn);

// Открываем соединение, прежде чем выполнить команду, // выполняем команду // и закрываем соединение.

и применение // Метод для перевода денег с одного счета на другой.

// Атрибут гарантирует подтверждение транзакции // в отсутствие исключений и ее откат в противном случае.

public void int int amt) { // Создаем подключение к серверу БД, // баланс счета, с которого снимаются деньги, string stint = "update accounts set + amt + where id + fromAccount;

command new conn);

// обновляем баланс счета, на который деньги перечисляются, - "update accounts set + amt + where id + toAccount;

= new conn);

// получаем балансы счетов, задействованных в переводе, int. = int:

// проверяем, что и if >= 5000 toBal <= 25000) { ("Money Transferred else // Если одно из условий не выполняется, // закрываем соединение и генерируем исключение.

throw new not transfer // В результате транзакция прерывается // Метод завершается нормально, и транзакция // автоматически // Метод для получения баланса счета настройка и компонентами public int getBal(int id ) { // Создаем connection для подключения к серверу БД new string stint = "select from accounts where + id;

// Создаем объект выполняемый по соединению = conn);

// Открываем соединение, // запрос, возвращающий скалярное // значение, и присваиваем результат переменной типа int.

int // Закрываем соединение return bal;

// Метод, получающий идентификаторы всех счетов из таблицы // Accounts public { SqlConnection conn = new string = "select id accounts Command = new // возвращает объект // позволяющий последовательно считывать данные из таблицы.

dr // Создаем объект для значений // идентификаторов ArrayList ids= new '// Добавляем значения в ArrayList while { conn.CloseO;

return ids;

} } } Примечание Прежде чем компилировать этот код, создайте с помощью утилиты Sn.exe файл и сохраните его в каталоге приложения.

9. В меню Build выберите команду Build Project, чтобы скомпилировать проект.

и применение Упражнение 2, Создание клиентского приложения Сейчас вы создадите Windows-приложение для взаимодействия с созданным ранее компонентом Account.

Создание клиентского приложения В меню File выберите New Project.

2. На панели Project Types выберите Visual Basic Projects (Visual C# Projects), а на пане ли Templates выберите шаблон Windows Application.

3. В поле Name введите и щелкните ОК.

4. Переименуйте Forml.vb в 5. В окне дизайнера измените значение свойства Name формы на Transac tionForm, а значение свойства Text — на Transaction Form.

6. Добавьте на форму TransactionForm надписи, текстовые поля, раскрывающиеся спис ки, кнопки, переключатели и задайте значения соответствующих свойств Text так, чтобы форма приняла следующий вид:

New Account Money. - -. -, -. Amount Balances г -. - ' - - - - - • • OldACl ;

_ - - • -, After.' 7. Задайте свойствам Name кнопок значения и Задайте свойствам Name раскрывающихся списков значения и tocbx.

9. Задайте свойству Name надписей, чье свойство Text равно или NewAC2, значения OldAC2, NewACl и соответственно.

10. Добавьте в класс TransactionForm следующий код:

Visual Basic Imports Imports Public Class TransactionForm настройка и Private Sub createbtn_Click(ByVal sender As ByVal e As Handles Try created Catch ex As Exception End Sub Private Sub sender As ByVal e As Handles account - New Sub Private Sub Dim accounts As ArrayList = If 0 Then Dim enumerator As While End While = Items.

= End If End Sub Private Sub sender As ByVal e As Handles Try CInt(tocbx.

Catch ex As Exception и обслуживаемых Finally = End End Sub Private Sub show01dBalances() = "Account Id: & Balance & ).ToString = "Account Id: & & Balance & Catch End Try End Sub Private Sub = "Account Id: & & Balance & = "Account Id: &. & Balance & Catch End Try End Sub Private Sub fromcbx_SelectedIndexChanged(ByVal sender As ByVai As Handles End Sub Private Sub sender As e As Handles clearNewBalancesO End Sub и компонентами Public Sub = = End Sub End Class Visual using System;

using using using using using using BankAccounts;

namespace TransactionApp { public class :

{ private account;

private void sender, e) { try { ("Account created } catch (Exception ex) { } private void sender, e) { { и применение компонентов Глава catch (Exception ex) { finally { = private void { { Id: + f romcbx.

+ Balance + = "Account Id: + tocbx. Selected Item. + Balance +.

} } private void ShowNewBalancesO { {• = "Account Id: + + Balance + = "Account Id: + + Balance + } private void sender, e) Практикум и компонентами private void sender, e) { clearNewBalancesO;

public void clearNewBalancesO {.

private void sender, e) { account = new private void accounts = if 0) enumerator = while -0;

Щелкните проект TransactionApp правой кнопкой и в контекстном меню выберите Add Reference — откроется одноименное диалоговое окно. На вкладке Projects до бавьте ссылку на проект BankAccount. Для на дополнительно следует перейти на вкладку и добавить ссылку на Создание и компонентов 12. В меню Build Build Project, чтобы скомпилировать проект.

Перед запуском приложения необходимо создать в БД таблицу Accounts, что вы сделаете в упражнении 3.

Примечание Для выполнения упражнения потребуется SQL Sewer.

Упражнение 3. Создание таблицы Accounts Щелкните меню Start | Microsoft Server Query Analyzer. В диалоговом окне Connect To SQL Server подключитесь к SQL Server. Окна Query Analyzer и Connect To SQL Server показаны ниже.

to SOL SQL SQL В списке БД выберите Northwind. Выполните сценарий, чтобы создать таблицу Accounts:

и управление SQL if exists (select * where id and = 1) drop table GO if exists * where id object_id( and OBJECTPROPERTY(id, = 1) BEGIN CREATE TABLE С [id] [int] NOT NULL, NULL ) ON END GO ALTER TABLE WITH NGCHECK ADD CONSTRAINT [PK_Accounts] PRIMARY KEY CLUSTERED ( ) ON [PRIMARY] GO Упражнение 4. Конфигурирование обслуживаемых компонентов с помощью утилиты Component Services Сейчас вы воспользуетесь утилитой Component Services, чтобы динамически зарегистрировать компонент Accounts и настроить его.

3. Запустите в Visual Studio приложение 2. Метод создает объекта и вы зывает метод load_Combos(). вызывает метод Ids(), и начина ется динамическая регистрация объекта Account.

3. Создайте счета и переведите сумму с одного счета на другой.

рите, что произойдет, если ввести одинаковые идентификаторы счета. Убедитесь, что при переводе денег со счета А на счет В баланс счета А составляет не менее 5 000, а счета В — не более 25 000.

4. Откройте папку Administrative Tools (Администрирование) и запустите утилиту Com ponent Services. В окне Component Services найдите приложение BankAccounts.

5. Щелкните приложение BankAccounts правой кнопкой и в контекстном меню рите Properties (Свойства). На вкладке Properties установите флажок Enforce Access Checks For This Application (Принудительная проверка доступа для Щелкните переключатель Perform Process Checks At the Process And Component Level (Проверка доступа на уровне процесса и компонента), затем ОК.

и применение компонентов 6. Раскройте узел BankAccounts\Components и изучите свойства компонента Bank Обратите особое внимание на параметры пула объек тов и создания объектов. Каково строки инициализации по умолчанию?

7. На (Безопасность) диалогового окна BankAccounts.Account Properties щелкните переключатель Enforce Component Level Access Checks (Принудительная проверка доступа для компонента). Какая роль будет создана для приложения Bank Accounts?

8. Добавьте в роли Users пользователей, у которых будет доступ к компоненту 9. Запустите приложение TransactionApp.exe контексте учетной записи пользователя, не членом роли Authorized Users. Какое об ошибке выведет система?

материала Закрепление материала Приведенные ниже вопросы помогут вам лучше усвоить основные темы ной главы. Если вы не сумеете ответить на вопрос, повторите материал соот занятия. Ответы для — в приложении А «Вопро сы и ответы» в книги.

1. Как СОМ+ связана с архитектурой DNA?

2. Кратко объясните следующих служб СОМ+:

• по запросу;

• Components;

• пулы объектов.

3. Что представляет собой обслуживаемый компонент?

4. Какой класс нужно определить, чтобы создать обслуживаемый компонент?

5. Как назначить приложению СОМ+ имя и идентификатор?

6. Почему тип активизации, так важен при регист рации обслуживаемого компонента?

7. Как назначить сборке строгое имя?

8. Назовите способы регистрации обслуживаемых компонентов.

9. Как заставить обслуживаемый компонент использовать ную на ролях, на уровне интерфейса?

10. Ниже приведен код компонента, использующего транзакции. Добавьте к классу Public атрибут, который позволит компоненту участвовать в тран закции, а также атрибут, продолжение или отмену тран закции при возникновении исключения.

Visual Imports Imports Назначить имя приложению СОМ+ ' Назначить сборке строгое имя Public Class Inherits 7 XML...

Создание и компонентов Public Sub End Sub Public Function String Return End Function End Class Visual using.

using // Назначить имя приложению СОМ+ // Назначить сборке имя public class MyFirstCOMPlusServices { public public string DoTransactionO { return "SUCCESSFUL";

Pages:     | 1 || 3 | 4 |   ...   | 6 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.