Здравствуйте, 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>>