0

我有一个调用授权管理器 (AzMan) API 的 WCF 服务 - 这是一个 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();
}

这段代码大部分时间都可以正常工作。但是,在进行负载测试时(始终使用相同的 userSID)​​,此代码有时会为角色列表返回一个空数组。AzMan 是否有负载过重的问题,或者我对 AzMan COM 对象的 regaurd 有什么不对的地方吗?

4

1 回答 1

1

使用 AzMan COM 对象时,您必须使用它Marshal.FinalReleaseCOMObject(object)来释放资源。如果不这样做,可能会发生内存泄漏。我必须将 AzMan 商店包装在一次性类中,以便每次调用都会打开 AzMan,使用它然后关闭它。结果是一个更慢但更稳定的应用程序。

看看这个SO question了解更多细节

于 2011-01-24T23:15:52.320 回答