Com AzMan API返回高负载的无效数据

Com AzMan API返回高负载的无效数据,com,azman,Com,Azman,我有一个WCF服务,它调用授权管理器(AzMan)API,这是一个COM接口。我使用以下代码获取给定用户帐户的角色列表: public string[] GetRoleNamesForUser(string appName, SecurityIdentifier userSID) { m_azManStore.UpdateCache(null); IAzApplication app = GetApplication(appName); List<string>

我有一个WCF服务,它调用授权管理器(AzMan)API,这是一个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();
}
public string[]GetRoleNamesForUser(string appName,SecurityIdentifier userSID)
{
m_azManStore.UpdateCache(null);
IAzApplication app=GetApplication(appName);
List userRoles=new List();
if(userSID!=null)
{
IAzClientContext context=app.InitializeClientContextFromStringSid(userSID.ToString(),1,null);
对象[]角色=(对象[])上下文。GetRoles(“”);
foreach(角色中的字符串)
{
userRoles.Add(uRole);
}
封送。最终删除对象(上下文);
}
返回userRoles.ToArray();
}

这段代码在大多数情况下运行良好。但是,在进行负载测试时(始终使用相同的userSID),此代码有时会为角色列表返回一个空数组。AzMan是否在重载方面有问题,或者我对ReGard对AzMan COM对象或其他对象做得不对?

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

更多细节,请看这个