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

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 250

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 244 245 246 247 248 249 < 250 > 251 252 253 254 255 256 .. 320 >> Следующая

[GuidAttribute("47430ED6-718D-42C6-9E45-78A99673C43C"). InterfaceTypeAttribute(ComlnterfaceType.IrrterfacelsUnknown)] public interface IBasicMath
{
int Add(int x. int y) :
}
то код IDL также изменится: // Интерфейс теперь не [dial]!
odl. uuid(47430E06-718D-42C6-9E45-78A99673C43C). Oleautomation, Custom({0F21F359-
AB84-41E8-9A78-36D110E6D2F9}. "AttribDotNetObjects.IBasicMath")
2
interface IBasicMath : iunknoan i
// Следов DispID не осталось
HRESULT _stdcall AddC[in] long x. [in] long y. [out. retval] long* pRetVal);
Управление регистрацией промежуточного модуля CCW
Возможно, об атрибутах CoirRegisterPuncticnAt tribute и ComUnregisterFunctl onAttnbute следуетрассказать подробнее. Как вы, наверное, уже знаете, в классических СОМ-
MessageBox.Show(" Inside RemoveExtraRegtogic f{x)". ".NET assembly
says:"):
}
}
}
Код приложения AttribDotNetObjects можно найти в подкаталоге Chapter 12.
Что у нас получилось
Если мы создадим для нашей сборки промежуточный модуль CCW при помощи утилиты tlbexp.exe, то мы сможем обнаружить, что наши атрибуты подействовали. Для I :; и CLSID были использованы явно указанные нами значения, а интерфейс IBasi cMath определен как [dual ]. Вот код IDLдля интерфейса IBasicMath:
// В сборке иы использовали атрибуты:
[GuidAttribute("47430E06-718D-42C6-9E45-78A9967X43C"). InterfaceTypeAttributetComlnterfaceType.InterfacelsDual)]
620 Глава 12 • Взаимодействие с унаследованным программным кодом
серверах определены две функции - OURegisterServe: и ¦ Эти
функции вызываются самыми разными утилитами, осуществляющими регистрацию сервера СОМ в реестре и удаление такой регистрации. В сборках .NKTтаких функций нет.
Если нам потребуется производить регистрацию промежуточного модуля
CCW, используемого для доступа к нашей сборке, каким-либо специальным образом, мы можем добавить в эти функции в генерируемом СОМ-сервере свои действия. Для этого нам потребуется определить статические методы с вышеуказанными атрибутами. Например, при регистрации промежуточного модуля для сборки из предыдущего примера мы получим сообщение, представленное на рис. 12.35.
Inside Add&traRfSflLosfc Цх)
[__<*L.j|
Рис. 12.35. Управление регистрацией COM
Необходимо отметить два момента, связанных с применением этих атрибути. Во-первых, названия методов, помеченных этими атрибутами, могут быть какими угодно, но метод, помеченный атрибутом ComRegi sterFunctionAttribute, должен принимать параметр типа String. Во-вторых, если мы определили один метод и пометили его атрибутом ComRegi sterFunctionAttribute, то мы должны определить и второй метод для ComUnregisterFunctionAttribute.
Взаимодействие со службами СОМ+
Последняя часть этой главы будет посвящена тому, как создавать типы .NET, использующие возможности среды выполнения СОМ+, Однако прежде чем приступить к изложению конкретных особенностей применения библиотеки базовых
классов для этой цели, мне придется вначале дать общий обзор служб СОМ+ и предыстории их появления.
Наверное, вам знаком продукт, который называется Microsoft Transaction Server (MTS). MTS - это сервер приложений, на котором могут размещаться модули классического СОМ для целей построения многоуровневых приложений уровня предприятия. Например, предположим, что мы создали классичес1 кий СОМ-сервер, который должен обращаться к источнику данных (например, через ADO) и вносить изменения в несколько взаимосвязанных таблиц. Если этот СОМ-сервер будет установлен под MTS, он получит важные дополнительные возможности, например поддержку использования явно объявленных транзакций или весьма удобной в применении модели безопасности, основанной на
ролях.
Для каждого СОМ-класса, предназначенного для работы под MTS, используется специальный контекстный объект, который определяет, как именно будет применяться объект MTS. Например, такой контекстный объект может хранить
информацию о правах пользователя в системе безопасности, об участии данного
Взаимодействие со службами 621
объекта в транзакции, о том, что СОМ-класс больше не нужен и его можно удалять из оперативной памяти и т. д.
В большинстве случаев типы СОМ, которые предназначаются для работы под управлением сервера MTS, являются сущностями без состояния. Это значит, что объект создается и удаляется средой выполнения MTS (для более эффективного управления ресурсами операционной системы) и при этом подключенный клиент не затрагивается. Если клиент производит вызов объекта СОМ-сервера, ссылкой на который, как ему кажется, он обладает, сервер MTS просто создает для этого клиента новый объект СОМ-сервера. Для СОМ-серверов под MTS обычно не предусматривается никакого графического интерфейса: они выполняют роль традиционных бизнес-объектов, которые занимаются лишь обслуживанием запросов со стороны клиентов.
MTS — это замечательное средство для создания очень надежных и масштабируемых систем, однако у него есть недостатки. Например, интеграцию между средами выполнения СОМ и MTS нельзя назвать идеальной. Каждая среда выполнения вносит записи о своих модулях в свою часть реестра, и в результате модуль СОМ, установленный под MTS1 не будет работать как обычный in-proc сервер. Кроме того, механизм создания объектов в классическом СОМ отличается от механизма создания объектов в MTS. Модули СОМ, установленные под MTS, должны создавать другие объекты специально для работы под MTS, используя для этого весьма специфические методы.
Предыдущая << 1 .. 244 245 246 247 248 249 < 250 > 251 252 253 254 255 256 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100