Разработка распределенных приложений в Microsoft.NET Framework


         

Использование слабо связанных событий


Для использования слабо связанных событий необходимо (рис. 6.7):

  • создать интерфейс, описывающий методы события;
  • создать так называемый класс события (event class), который является особой обслуживаемой компонентой, реализующей указанный интерфейс;
  • создать реализующую этот же интерфейс обслуживаемую компоненту и подписать ее на событие; таких сервисных компонент можно создать несколько и они могут входить в состав различных приложений COM+;
  • написать в издателе код создания события, заключающийся в создании экземпляра класса события и вызова его методов.


Рис. 6.7.  Использование слабо связанных событий

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

// LceEvents.cs using System; using System.Runtime.InteropServices; using System.EnterpriseServices; public static class EventsGuids { public const string interfaceId = "A5105B2C-40BF-46C6-B19C-4286A423DBF9"; public const string eventClassId = "DF64D391-CCE9-4FC6-B5F2-3F4DE3FA48C2"; } [Guid(EventsGuids.interfaceId)] public interface ILceMessage { void TriggerEvent(string message); } // LceEvents.cs

Далее описано приложение, являющееся издателем события.

// LcePublisher.cs using System; using System.Threading; using System.Runtime.InteropServices; using System.EnterpriseServices; [assembly: ApplicationName("LCE publisher")] [assembly: ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationAccessControl(false)]

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

[EventClass] [Guid(EventsGuids.eventClassId)] [Transaction(TransactionOption.Disabled)] public class LceEvents: ServicedComponent, ILceMessage { public void TriggerEvent(string message) { } }

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

Содержание  Назад  Вперед