AzMan API возвращает неверные данные с высокой нагрузкой - PullRequest
0 голосов
/ 29 декабря 2010

У меня есть служба WCF, которая вызывает API диспетчера авторизации (AzMan), который является интерфейсом COM. Я использую следующий код, чтобы получить список ролей для данной учетной записи пользователя:

public string[] GetRoleNamesForUser(string appName, SecurityIdentifier userSID)
{
    m_azManStore.UpdateCache(null);
    IAzApplication app = GetApplication(appName);
    List<string> userRoles = new List<string>();
    if (userSID != null)
    {
        IAzClientContext context = app.InitializeClientContextFromStringSid(userSID.ToString(), 1, null);
        object[] roles = (object[])context.GetRoles("");
        foreach (string uRole in roles)
        {
            userRoles.Add(uRole);
        }
        Marshal.FinalReleaseComObject(context);
    }
    return userRoles.ToArray();
}

Этот код работает нормально большую часть времени. Однако при нагрузочном тестировании (всегда с одним и тем же идентификатором пользователя) этот код иногда возвращает пустой массив для списка ролей. Есть ли у AzMan проблема с большой нагрузкой или я что-то не так делаю с regaurd для COM-объекта AzMan или что-то в этом роде?

1 Ответ

1 голос
/ 25 января 2011

При использовании COM-объекта AzMan вы должны использовать Marshal.FinalReleaseCOMObject(object) для освобождения ресурсов. Утечка памяти возможна, если этого не сделать. Мне пришлось обернуть магазин AzMan в одноразовый класс, чтобы каждый вызов открывал AzMan, использовал его, а затем закрывал. В результате получается более медленное, но более стабильное приложение.

Посмотрите на этот ТАК * вопрос 1005 * для более подробной информации

...