2010-08-17 2 views
4

in-proc 세션 대신 State Server를 사용하도록 수정해야하는 초대형 ASP.NET 응용 프로그램을 상속 받았습니다. 응용 프로그램 전체에서 세션에 사용 된 모든 클래스를 추적하여 직렬화 할 수 있는지 확인해야합니다. 세션에서 사용되는 클래스를 결정하기 위해 코드를 분석하는 데 사용할 수있는 도구가 있습니까?ASP.NET에서 어떤 개체가 세션에 사용되는지 확인하십시오.

답변

1

쉽게 다음 (C#)를 사용하여 현재 세션 객체의 빠른 "스냅 샷"을 얻을 수있는 코드 :

BinaryFormatter b = new BinaryFormatter(); 
StringBuilder debug = new StringBuilder(); 
MemoryStream m; 

foreach (String s in Session.Keys) { 
    // try to serialize the object 
    var obj = Session[s]; 
    if (obj != null) { 
     m = new MemoryStream(); 
     try { 
      b.Serialize(m, obj); 
      debug.AppendFormat("{0}: {1} bytes\n", s, m.Length); 
     } 
     catch (Exception ex) { 
      debug.AppendFormat("ERROR: {0}, Message: {1}\n", s, ex.Message); 
     } 
    } 
} 

그런 다음 당신의 마음에 드는 텍스트 컨테이너에서 "디버그"문자열을 표시합니다.

상태 관리자/SQL Server로 전환하면 실제로 직렬화 할 수없는 내용이 표시되지만 첫 번째 직렬화 불가능 개체에서 중지되기 때문에 유용합니다. 또한 어떤 키가 그 객체를 소유하고 있는지 알려주지 않습니다.

코드는 this Stackoverflow answer에서 변경되었습니다.

1

Visual Studio에서 와일드 카드 매핑을 사용하여 검색을 수행하고 Session [* =]과 같은 패턴을 검색 할 수 있습니다.

또 다른 하나는 직접 실행 창을 디버깅하는 동안 사이트를 탐색 한 후 세션 상태에있는 것을 요청하는 것입니다. 완전한 증거는 아니지만 이미 도움이 될 수 있습니다.

다른 기술은 세션 상태를 Sql 서버 또는 상태 관리자 모드 (out of process)로 설정하고 디버그하여 개체를 직렬화 할 수없는 경우 불평 시작 위치를 확인하는 것입니다. 동시에 응용 프로그램을 철저히 테스트했습니다.

관련 문제