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>>
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.