Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:

Для чего же требуется RegSvcs.exe?
Как можно помнить из предыдущей главы по взаимодействию COM, сборки .NET имеют архитектуру, отличную от архитектуры компонентов COM. Задача RegSvcs.exe
состоит в разрешении этих различий, чтобы сборки .NET удовлетворяли интерфейсу, ожидаемому службами COM+. Чтобы выполнить свою работу, утилита RegSvcs.exe
проделывает четыре вещи.
1. Загружает и регистрирует сборку .NET.
2. Создает библиотеку типов для сборки .NET.
3. Импортирует библиотеку типов в приложение служб COM+.
4. Использует метаданные внутри DLL, чтобы правильно сконфигурировать библиотеку типов внутри приложения служб COM+.
RegSvcs
не только заботится обо всех деталях импортирования сборки в службы COM+, но предоставляет также достаточно хороший контроль за тем, как это происходит. Этот контроль обеспечивается в форме дополнительных параметров командной строки. Вот синтаксис команды:
Regsvcs . NetComponentName [ COM+AppName ] [ TypeLibrary.tlb ]
С помощью второго аргумента ( COM+AppName
) можно определить другое имя для создаваемого приложения COM+, предоставляя второй аргумент командной строки при вызове RegSvcs
. Для еще большей гибкости можно определить имя файла библиотеки типов, которая создается при предоставлении третьего аргумента ( TypeLibrary.tlb
). Желательно всегда предоставлять эти аргументы при вызове RegSvcs
, так как более ранние версии этой программы будут молчаливо перезаписывать любые существующие файлы, которые могут иметь такие же имена, как у вновь создаваемых файлов.
Предварительные итоги
Теперь мы знаем, как подготовить сборку .NET для применения вместе со службами COM+. Эта подготовка включает в себя:
□ Снаряжение сборки рекомендованными атрибутами сборки
□ Соединение классов прокси с внутренними "рабочими" классами посредством атрибута ComEmulate
□ Развертывание сборок с помощью sn.exe
, al.exe
и, возможно, RegSvcs.exe
Имея общую информацию, перейдем к обсуждению использования конкретных служб COM+ из сборок .NET. Начнем с транзакций.
Использование транзакций со сборками .NET
Существуют две вещи, которые необходимо сделать, чтобы подготовить класс .NET для транзакций. Первое: необходимо изменить прокси класса с помощью атрибута для указания его уровня поддержки транзакций. Второе: необходимо добавить в класс код для управления его поведением, когда он участвует в транзакциях.
Вспомним концепцию "контекста" транзакции, которая была рассмотрена выше. Она играет здесь важную роль, поэтому к ней можно вернуться для быстрого повторения.
Определение транзакционной поддержки
Ранее при использовании транзакций из служб COM+ можно было увидеть настройку уровня транзакций в окне свойств класса в Snap-In службы компонентов. Эта настройка позволяет задать уровень поддержки транзакций, который службы COM+ будут предоставлять стандартному компоненту COM.

Иначе в .NET уровень поддержки транзакций в сборке можно определить не с помощью графического окна в snap-in службы компонентов, а программным путем с помощью атрибута Transaction
, определенного в пространстве имен EnterpriseServices
. В примере ниже мы определяем, что следующий класс прокси должен поддерживать транзакции. При заданном значении атрибута компонент будет сконфигурирован для поддержки транзакций, когда он импортируется в службы COM+ с помощью RegSvcs.exe
.
[Transaction(TransactionOption.Supported)]
public class ProxyClass:ServicedComponent {
}
Supported
является только одним из нескольких значений, которые можно присвоить атрибуту Transaction
компонента. Фактически, существует четыре значения, которые представлены в перечислении TransactionOption
, являющемся частью пространства имен System.EnterpriseServices
.
□ Когда атрибут Transaction
класса задан как Disabled
, службы COM+ не предоставляют транзакционной поддержки для класса, даже если такая поддержка определена где-то в коде. (Другими словами, вызовы этого класса, сделанные для ContextUtil
с целью фиксации или отмены транзакций, игнорируются. Мы познакомимся с ContextUtil
в следующем разделе.)
□ Когда атрибут Transaction
класса задан как NotSupported
, такой класс не вовлекается в транзакции, запускаемые его клиентами, другими словами он не помещается в их контекст. В данной конфигурации объекты этого класса не определяют, будет ли вызываемая транзакция фиксироваться или отменяться.
□ Когда атрибут Transaction
класса задан как Supported
, объекты этого класса могут вовлекаться в контекст транзакций своих вызывающих клиентов, если эти вызывающие клиенты на самом деле начинают транзакцию. Такой объект не может самостоятельно порождать транзакцию.
□ Когда атрибут Transaction
класса задан как Required
, службы COM+ знают, что объекты этого класса могут выполняться только в контексте транзакции. Если такой объект вызывается клиентом, имеющем транзакционный контекст, объект наследует контекст транзакции клиента. Если, однако, объект вызывается клиентом, который не имеет транзакционного контекста, службы COM+ создают контекст для этого объекта.
□ Когда атрибут Transaction
класса задан как RequiresNew
, службы COM+ создают новую транзакцию для класса каждый раз, когда он вызывается. Даже если клиент объекта уже имеет транзакцию, службы COM+ создают новую транзакцию для серверного объекта. Как можно догадаться, классы, сконфигурированные подобным образом, способны отменить только свои собственные транзакции, а не работу своих клиентов.
На практике большинство разработчиков используют только одну или две из этих настроек. Значение Supported
подходит для классов типа класса Settings
, которому нужно будет обслуживать классы с транзакциями и без транзакций. Для большинства других транзакционных классов можно справиться, задавая значение Required
. Однако все-таки может возникнуть ситуация, где потребуются одно или несколько составных значений, дополнительную информацию можно найти в книге "Professinal Windows DNA Programming" (ISBN 1-861004-45-1) издательства Wrox Press.
Кодирование транзакций с помощью ContextUtil
Модификация класса с помощью атрибута Transaction
является только частью того, что необходимо сделать, чтобы подготовить его для участия в транзакции. Надо также определить, как каждый метод в этом классе ведет себя, когда он вызывается как часть транзакции. Это осуществляется с помощью класса ContextUtil
из пространства имен System.EnterpriseServices
.
Интервал:
Закладка: