Получить имя пользователя вызвавшего COM+
От: Syffest Россия  
Дата: 11.08.06 14:59
Оценка:
Помогите пожалуйста... несколько дней бьюсь над проблемой. Есть компонент COM+ на .NET. При этом хочется использовать Pooling, но в случае включения пулинга, SecurityCallContext становится недоступен. Каким образом мне получить идентификатор или UPN или вообще хоть что-нибудь что позволит мне идентифицировать Caller-а из тела метода COM+ компонента?
Re: Получить имя пользователя вызвавшего COM+
От: Tom Россия http://www.RSDN.ru
Дата: 12.08.06 07:22
Оценка:
Здравствуйте, Syffest, Вы писали:

S>Помогите пожалуйста... несколько дней бьюсь над проблемой. Есть компонент COM+ на .NET. При этом хочется использовать Pooling, но в случае включения пулинга, SecurityCallContext становится недоступен. Каким образом мне получить идентификатор или UPN или вообще хоть что-нибудь что позволит мне идентифицировать Caller-а из тела метода COM+ компонента?


Вопрос в том а действитель ли тебе нужен Pooling и COM+, опиши для чего ты их используешь
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
Re[2]: Получить имя пользователя вызвавшего COM+
От: Syffest Россия  
Дата: 15.08.06 07:40
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Вопрос в том а действитель ли тебе нужен Pooling и COM+, опиши для чего ты их используешь


COM+ нужен и это необсуждаемо. Можно много говорить о том как круто WebServices или ремоутинг, или придумать ещё с десяток вариантов организации сервера приложений. Но в моём случае религиозные войны не проходят. COM+ и отступать некуда, за нами Москва. Pooling хотелось бы использовать для тех компонентов которые обрабатывают множество несложных кратковременных запросов от большого числа пользователей. Так как одновременных пользователей в районе 20 тысяч, то думаю что затраты на создание объектов в данном случае излишни, тем более модель в данном случае стэйтлесс. В одной из задач нужно на сервере приложений идентифицировать пользователя вызвавшего метод. Прокидывать его в параметре как-то некрасиво. Вот и задался вопросом, а вообще это возможно или нет?
Re: Получить имя пользователя вызвавшего COM+
От: Tom Россия http://www.RSDN.ru
Дата: 15.08.06 09:44
Оценка:
Здравствуйте, Syffest, Вы писали:

S>Помогите пожалуйста... несколько дней бьюсь над проблемой. Есть компонент COM+ на .NET. При этом хочется использовать Pooling, но в случае включения пулинга, SecurityCallContext становится недоступен. Каким образом мне получить идентификатор или UPN или вообще хоть что-нибудь что позволит мне идентифицировать Caller-а из тела метода COM+ компонента?


Незнаю что у тебя становиться недоступным но у меня всё работает. Код правда на плюсах, но разницы ессно никакой не должно быть:

    CComPtr<ISecurityCallContext> pSecurityCallContext;
    hr = CoGetCallContext(
        IID_ISecurityCallContext, 
        reinterpret_cast<void**>(&pSecurityCallContext));

    if (SUCCEEDED(hr))
    {
        CComVariant OriginalCaller;
        hr = pSecurityCallContext->get_Item(
            CComBSTR(L"OriginalCaller"),
            &OriginalCaller);

        if (SUCCEEDED(hr))
        {
            CComQIPtr<ISecurityIdentityColl> pSecurityIdentityColl(OriginalCaller.punkVal);

            CComVariant CallerName;
            hr = pSecurityIdentityColl->get_Item(
                CComBSTR("AccountName"),
                &CallerName); // Получаем реальное имя акаунта...

        }
    }


Работает как с пулингом так и без него.

Вообще по поводу пулинга — он предназначен для обьектов которые ДОЛГО создаются, ты пойми затраты на обслуживание пула могут быть на порядок больше чем на простое создание обьекта... По этому и спрашивал нужен ли тебе пулинг действительно. Сделай тест...
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
Re[2]: Получить имя пользователя вызвавшего COM+
От: Syffest Россия  
Дата: 15.08.06 10:33
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Работает как с пулингом так и без него.


Tom>Вообще по поводу пулинга — он предназначен для обьектов которые ДОЛГО создаются, ты пойми затраты на обслуживание пула могут быть на порядок больше чем на простое создание обьекта... По этому и спрашивал нужен ли тебе пулинг действительно. Сделай тест...



Я и не был уверен что он мне нужен будет. Просто эксперементировал в плане возможностей и того как мне реализовать получение вызывающего пользователя. Но в .Net если я включаю Pooling объектов то обращение к SecurityCallContext возвращает, что контекст недоступен, что меня очень удивило. Т.е. если я буду получать пользователя из контекста, то мне нужно будет заведомо отказаться от пулинга даже если он понадобится. Вот с этим и хотелось бы разобраться.
Re[3]: Получить имя пользователя вызвавшего COM+
От: Tom Россия http://www.RSDN.ru
Дата: 15.08.06 10:48
Оценка:
Здравствуйте, Syffest, Вы писали:

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


Tom>>Работает как с пулингом так и без него.


Tom>>Вообще по поводу пулинга — он предназначен для обьектов которые ДОЛГО создаются, ты пойми затраты на обслуживание пула могут быть на порядок больше чем на простое создание обьекта... По этому и спрашивал нужен ли тебе пулинг действительно. Сделай тест...



S>Я и не был уверен что он мне нужен будет. Просто эксперементировал в плане возможностей и того как мне реализовать получение вызывающего пользователя. Но в .Net если я включаю Pooling объектов то обращение к SecurityCallContext возвращает, что контекст недоступен, что меня очень удивило. Т.е. если я буду получать пользователя из контекста, то мне нужно будет заведомо отказаться от пулинга даже если он понадобится. Вот с этим и хотелось бы разобраться.


Незнаю, что значит "Но в .Net если я включаю Pooling объектов" пулинг включается в настройках COM+ обьекта

ПС:
У меня w2003 .NET 1.1
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
Re[4]: Получить имя пользователя вызвавшего COM+
От: Syffest Россия  
Дата: 15.08.06 13:24
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Незнаю, что значит "Но в .Net если я включаю Pooling объектов" пулинг включается в настройках COM+ обьекта


Tom>ПС:

Tom> У меня w2003 .NET 1.1

Ну да, неправильно сказал. Конечно в настройках COM+.
У меня 2003 .NET 2.0. При включенном пулинге объектов(не приложений, а именно объектов, в COM+ 1.5 ещё и пул приложений есть) при обращении к SecurityCallContext получаю ошибку что контекст недоступен. Странно что у тебя это не повторяется.
Re[5]: Получить имя пользователя вызвавшего COM+
От: Tom Россия http://www.RSDN.ru
Дата: 15.08.06 13:28
Оценка:
S>Ну да, неправильно сказал. Конечно в настройках COM+.
S>У меня 2003 .NET 2.0. При включенном пулинге объектов(не приложений, а именно объектов, в COM+ 1.5 ещё и пул приложений есть) при обращении к SecurityCallContext получаю ошибку что контекст недоступен. Странно что у тебя это не повторяется.

Давай код, попробуем...
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.