Обслуживаемая компонента .NET Framework является объектом класса, наследованным от System.EnterpriseServices.ServicedComponent, и отвечающим следующим требованиям:
Статические методы в классе компоненты возможны, но они выполняются в контексте клиента, и имеют доступа к контексту COM+ клиента, если таковой существует.
Класс сервисной компоненты должен быть объявлен в сборке, которая может быть зарегистрирована в качестве приложения COM+. Такая сборка не должна иметь классов общего вида со спецификатором public, и должна быть подписана.
Класс обслуживаемой компоненты может иметь атрибуты из пространства имен System.EnterpriseServices, связанные с транзакцией (TransactionAttribute), активацией (JustInTimeActivationAttribute и ObjectPoolingAttribute) и синхронизацией (SynchronizationAttribute). Как упоминалось ранее, поддержка транзакции автоматически означает JIT-активацию и участие в активности, тем не менее следует перечислять атрибут JIT активации явно.
Рассмотрим код простейшей обслуживаемой компоненты.
// Файл SampleComponent.cs using System; using System.EnterpriseServices; [assembly: ApplicationAccessControl(false)] [assembly: ApplicationName("Serviced Component Example 01")] [assembly: Description("Sample of .NET serviced component.")] [assembly: ApplicationActivation(ActivationOption.Server)]Эти атрибуты задают свойства сборки, которая затем будет зарегистрирована в качестве приложения COM+. Атрибут ApplicationActivation позволяет выбрать серверный или библиотечный тип приложения.
namespace ServicedComponentSample { [JustInTimeActivation] [Transaction(TransactionOption.Required)] [ObjectPooling(Enabled=true, MinPoolSize=5, MaxPoolSize=10)] public class SampleComponent: ServicedComponent {Объявленный выше класс компоненты, как видно из атрибутов, требует наличия транзакции и использует JIT активацию с пулом объектов