Re[4]: ошибка доступа при вызове COM+ компонента
От: TK Лес кывт.рф
Дата: 24.06.04 12:59
Оценка: 12 (1)
Hello, "Ael"
> Мне бы поподробнее... Может дадите ссылку (название статьи в MSDN) я почитаю, чтобы поменьше глупых вопросов задавать.

В MSDN cтатья называется

Understanding Enterprise Services (COM+) in .NET

Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: ошибка доступа при вызове COM+ компонента
От: Аноним  
Дата: 25.06.04 14:27
Оценка: 12 (1)
Здравствуйте, Ael, Вы писали:

Ael>Достаточно было зайти в COM+ каталог и убрать галочку с "Принудительная проверка доступа для приложения" то все начинало работать. Но я знал, что это глюк, потому что:

[скип]
Ael>2. Достаточно было один раз успешно вызвать компонент, после этого галочку можно было поставить обратно, все равно все работало.

Из пула компонент доставался, вестимо...
Re[8]: ошибка доступа при вызове COM+ компонента
От: Аноним  
Дата: 25.06.04 16:55
Оценка: 12 (1)
Здравствуйте, Ael, Вы писали:

Ael>Регистрируем в COM+ каталоге, изначально в dcomcnfg.msc стоит "принудительная проверка доступа для приложения", пробуем вручную (из dcomcnfg.msc) запустить, получаем ошибку доступа. А если вручную в dcomcnfg.msc определить роль и добавить себя к этой роли, все начинает работать.


Ну вообще-то так и должно быть! Вставь еще [assembly: ApplicationAccessControl(false)] если такая проверка тебе не нужна. А если нужна, то будь добр, добавь соответствующие роли.
Re[2]: ошибка доступа при вызове COM+ компонента
От: TK Лес кывт.рф
Дата: 24.06.04 08:40
Оценка: 6 (1)
Hello, "Ael"
> В итоге неожиданно заработало (может испугалось ) Но это до следующего раза.
> Интересный ньюанс — когда просто захожу в кофигурационную утилиту COM приложений (dcomcngf.msc) и пробую вручную запустить какое-нибудь COM+ приложение (конечно, серверного типа) для которого определена "принудительная проверка доступа для приложения", она (утилита) мне пишет
>

> "У вас нет разрешения на выполнение запрошенного действия. Если на конечном компьютере для системного приложения задействованы средства безопасности, убедитесь, что вы включены в соответствующие роли".


Роль Marshaller создана?

Whenever RBS is configured on the method level, the Marshaller role is required: When method calls are made and RBS is not configured on methods, the serviced component infrastructure makes calls on IRemoteDispatch

Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
ошибка доступа при вызове COM+ компонента
От: Ael США  
Дата: 23.06.04 14:45
Оценка:
Может кто-нибудь сталкивался с такой проблемой. Я создаю на C# COM+ компоненты, регистрирую их в COM+ каталог, и с каждым одна и та же проблема — когда клиент (с правами администратора, на той же машине) вызывает с клиентского кода эти компоненты — вылетает ошибка — "Access Denied!".

Вначале лечилось очень странным образом. Достаточно было зайти в COM+ каталог и убрать галочку с "Принудительная проверка доступа для приложения" то все начинало работать. Но я знал, что это глюк, потому что:
1. Ко всем ролям, которые, которые определяли мои компоненты вызывающий клиент принадлежал.
2. Достаточно было один раз успешно вызвать компонент, после этого галочку можно было поставить обратно, все равно все работало.

То есть я понимал, что это глюк, но пока в конечном итоге все работало, я не беспокоился. Но сегодня очередной COM+ компонент (библиотечного типа) просто отказался вызываться — "Доступ запрещен" по любому, ничего не помогает Что посоветуете?
Спасибо!

P.S. Может лучше было COM этот вопрос запостить?
"Before you slip into unconsciousness, I'd like to have another..."(c) Jim Morrison
Re: ошибка доступа при вызове COM+ компонента
От: Ael США  
Дата: 23.06.04 16:07
Оценка:
Здравствуйте, Ael, Вы писали:
В итоге неожиданно заработало (может испугалось ) Но это до следующего раза.
Интересный ньюанс — когда просто захожу в кофигурационную утилиту COM приложений (dcomcngf.msc) и пробую вручную запустить какое-нибудь COM+ приложение (конечно, серверного типа) для которого определена "принудительная проверка доступа для приложения", она (утилита) мне пишет

"У вас нет разрешения на выполнение запрошенного действия. Если на конечном компьютере для системного приложения задействованы средства безопасности, убедитесь, что вы включены в соответствующие роли".

"Before you slip into unconsciousness, I'd like to have another..."(c) Jim Morrison
Re[3]: ошибка доступа при вызове COM+ компонента
От: Ael США  
Дата: 24.06.04 12:42
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "Ael"

>> В итоге неожиданно заработало (может испугалось ) Но это до следующего раза.
>> Интересный ньюанс — когда просто захожу в кофигурационную утилиту COM приложений (dcomcngf.msc) и пробую вручную запустить какое-нибудь COM+ приложение (конечно, серверного типа) для которого определена "принудительная проверка доступа для приложения", она (утилита) мне пишет
>>

>> "У вас нет разрешения на выполнение запрошенного действия. Если на конечном компьютере для системного приложения задействованы средства безопасности, убедитесь, что вы включены в соответствующие роли".


TK>Роль Marshaller создана?

TK>

TK>Whenever RBS is configured on the method level, the Marshaller role is required: When method calls are made and RBS is not configured on methods, the serviced component infrastructure makes calls on IRemoteDispatch

Мне бы поподробнее... Может дадите ссылку (название статьи в MSDN) я почитаю, чтобы поменьше глупых вопросов задавать.
... << RSDN@Home 1.1.3 stable >>
Re[5]: ошибка доступа при вызове COM+ компонента
От: Ael США  
Дата: 25.06.04 14:20
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "Ael"

>> Мне бы поподробнее... Может дадите ссылку (название статьи в MSDN) я почитаю, чтобы поменьше глупых вопросов задавать.

TK>В MSDN cтатья называется

Understanding Enterprise Services (COM+) in .NET

Прочитал раздел о безопасности. Все же, мне кажется у меня проблема немого другого характера.

Whenever RBS is configured on the method level, the Marshaller role is required

То есть, это относится к тем ситуациям, когда для метода определен [SecureMethod] или [SecurityRole] атрибут. У меня же проблемы доступа с теми компонентами, для которых вообще не определено никаких ролей. Более того, как оказалось самый простой и, наверное, правильный способ лечения, — это определить для приложения роль, сконфигурировать компонент использовать эту роль, и потом добавить себя к этой роли.
Я вот еще вспоминал известный глюк с ошибкой доступа в ASP.NET, который лечится отключением антивируса, может и здесь виноват антивирус?

Кстати еще насчет роли Marshaller — а разве она не добавляется автоматически при необходимости — из статьи:
Therefore, a Marshaller role is added to the application when the assembly is registered and users must then be added administratively to this role.

то есть, получается, в этом случае руками остается только присоединить пользователей к этой роли.
... << RSDN@Home 1.1.3 stable >>
Re[6]: ошибка доступа при вызове COM+ компонента
От: Аноним  
Дата: 25.06.04 14:25
Оценка:
Здравствуйте, Ael, Вы писали:

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

Я что-то не пойму. Если

не определено никаких ролей

так откуда доступ к компоненту возьмется? (При условии что "Принудительная проверка доступа для приложения" отмечено)
Можно аттрибуты класса компонента посмотреть (код)?
Re[7]: ошибка доступа при вызове COM+ компонента
От: Ael США  
Дата: 25.06.04 16:31
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Ael, Вы писали:


А>У меня же проблемы доступа с теми компонентами, для которых вообще не определено никаких ролей.


А>Я что-то не пойму. Если

не определено никаких ролей

так откуда доступ к компоненту возьмется? (При условии что "Принудительная проверка доступа для приложения" отмечено)

А>Можно аттрибуты класса компонента посмотреть (код)?

А самый простой, вот такой, например:
using System;
using System.Runtime.InteropServices;
using System.EnterpriseServices;
using System.Reflection;

[assembly:ApplicationActivation(ActivationOption.Server)]
[assembly:ApplicationName("The Simplest ComPlus Application")]
[assembly:AssemblyKeyFile("..\\..\\key.snk")]
[assembly: ApplicationID("814C8CFD-2295-4ffb-B190-D0A77A3C94F1")]

namespace Simplest
{
    [Guid("814C8CFD-2295-4ffb-B190-D0A77A3C94F0")]
    [JustInTimeActivation]
    public class SimplestComponent:ServicedComponent
    {
        public String HelloWorldMethod()
        {
            return "Hello World!";
        }
    }
}

Регистрируем в COM+ каталоге, изначально в dcomcnfg.msc стоит "принудительная проверка доступа для приложения", пробуем вручную (из dcomcnfg.msc) запустить, получаем ошибку доступа. А если вручную в dcomcnfg.msc определить роль и добавить себя к этой роли, все начинает работать.
... << RSDN@Home 1.1.3 stable >>
Re[2]: ошибка доступа при вызове COM+ компонента
От: Ael США  
Дата: 25.06.04 16:31
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Ael, Вы писали:


Ael>>Достаточно было зайти в COM+ каталог и убрать галочку с "Принудительная проверка доступа для приложения" то все начинало работать. Но я знал, что это глюк, потому что:

А>[скип]
Ael>>2. Достаточно было один раз успешно вызвать компонент, после этого галочку можно было поставить обратно, все равно все работало.

А>Из пула компонент доставался, вестимо...

Даже если убить dllhost.exe?
Похоже, что так... как же это я не сообразил
... << RSDN@Home 1.1.3 stable >>
Re[9]: ошибка доступа при вызове COM+ компонента
От: Ael США  
Дата: 25.06.04 17:30
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Ael, Вы писали:


Ael>>Регистрируем в COM+ каталоге, изначально в dcomcnfg.msc стоит "принудительная проверка доступа для приложения", пробуем вручную (из dcomcnfg.msc) запустить, получаем ошибку доступа. А если вручную в dcomcnfg.msc определить роль и добавить себя к этой роли, все начинает работать.


А> Ну вообще-то так и должно быть! Вставь еще [assembly: ApplicationAccessControl(false)] если такая проверка тебе не нужна. А если нужна, то будь добр, добавь соответствующие роли.


Вот, нашел потверждение твоим словам в MSDN:
A method is accessible to callers only if you assign a role to it, either by explicitly assigning the role directly to the method or by assigning a role to the method's interface or the method's component, in which case the role will be inherited by the method. If no role is assigned and if access checks are enabled, all calls to the method will fail.
... << RSDN@Home 1.1.3 stable >>