2010-12-28 3 views
0

COM 인터페이스 인 Authorization manager (AzMan) API를 호출하는 WCF 서비스가 있습니다. 다음 코드를 사용하여 주어진 사용자 계정에 대한 역할 목록을 얻습니다.AzMan API가로드가 많은 잘못된 데이터를 반환합니다.

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를 사용하지 않는 것이 있습니까?

답변

1

AzMan COM 개체를 사용할 때는 Marshal.FinalReleaseCOMObject(object)을 사용하여 리소스를 해제해야합니다. 이것이 수행되지 않으면 메모리 누출이 가능합니다. 각 호출이 AzMan을 열어서 닫고 사용하도록 일회용 클래스에 AzMan 저장소를 포장해야했습니다. 결과는 더 느리지 만보다 안정적인 응용 프로그램입니다.

자세한 내용은 SO question을 참조하십시오.

관련 문제