Как программно проверить Разрешить внутренние свойства IIS в приложении COM+?

Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+

Откройте объект приложения COM+.

Открытые компоненты.

Щелкните правой кнопкой мыши класс и выберите «Свойства».

В разделе «Дополнительно» есть флажок «Разрешить внутренние свойства IIS».

Как установить этот флажок программно?

Я могу программно создавать и удалять приложения COM+, но у класса ComApplication, похоже, нет способов изменить настройки в созданном приложении.


person Andrew J. Brehm    schedule 02.12.2008    source источник


Ответы (2)


Я узнал, как это сделать.

По-видимому, мне нужно получить коллекцию приложений COM+, найти нужное (по имени), затем получить коллекцию компонентов в приложении, затем пройтись по коллекции и установить атрибут:

            //get collection of applications
        COMAdminCatalog catalog = new COMAdminCatalog();

        catalog.Connect("127.0.0.1");

        COMAdminCatalogCollection applications = (COMAdminCatalogCollection)catalog.GetCollection("Applications");

        applications.Populate(); //no idea why that is necessary, seems to be

        // appId for the application we are looking for
        object appId = new object();

        int count = applications.Count;
        ICatalogObject item;

        if (count == 0) return;

        //search collection for item with name we are looking for
        for (int i = 0; i < count; i++)
        {

            item = (ICatalogObject)applications.get_Item(i);

            if (applicationName == (string)item.get_Value("Name"))
            {

                appId = item.Key;

                Console.WriteLine("appId found for " + applicationName + ": " + appId.ToString());

            }

        }

        // get all components for the application
        COMAdminCatalogCollection components;

        components = (COMAdminCatalogCollection)applications.GetCollection("Components", appId);
        components.Populate(); // again, no idea why this is necessary

        // set the attribute in all components

        foreach (COMAdminCatalogObject component in components)
        {

            Console.WriteLine("Setting IISIntrinsics attribute in " + component.Name + ".");
            component.set_Value("IISIntrinsics", true);
            components.SaveChanges();

        }

Я думаю, что это можно сделать лучше и с меньшим количеством отливок. Но я не знаю как.

Это подойдет.

person Andrew J. Brehm    schedule 02.12.2008
comment
Всего несколько замечаний, не зная подробно объектной модели... 1. Инициализируйте appId равным нулю. 2. Используйте «break», чтобы выйти из цикла for после того, как вы нашли свое приложение. 3. Поместите 'if (appId != null)' вокруг последующего кода. 4. component.SaveChanges(), вероятно, может быть за пределами цикла foreach. - person Arnout; 03.12.2008

У меня нет опыта работы с этим конкретным свойством, но, похоже, оно задокументировано в MSDN.

person Arnout    schedule 02.12.2008