2009-12-22 2 views

답변

3

쉽게는 아니며 잠재적 인 문제를 일으킬 수 있습니다.

이론적으로 리플렉션을 사용하여 대리인이 호출하는 개체의 메서드를 결정하고이 개체에 대한 사용자 지정 serialization 프로세스를 작성할 수 있습니다. 직렬화가 해제되면 다시 한 번 정보를 대리자 참조로 변환하는 논리를 작성해야합니다.

일반적으로 런타임시 대리인을 다시 생성해야하는 개체를 발견하는 것이 항상 가능한 것은 아닙니다. 대리자가 람다 (lambda) 또는 익명 메소드 (anonymous method)를 참조하는 경우, 클로저가 포함될 수 있기 때문에 더욱 복잡하게 만듭니다.

당신은 아마에서 더 나은 중 하나

  1. 요청 사이의 작업 대리자를 보존하고 ASP.NET 코드 포스트 백에 대리자를 재 부착 필요하지 않습니다. 이것은 가장 위험한 옵션 IMHO입니다.

  2. 세션 상태에 대리자 참조를 저장하고 다시 게시 할 때 해당 개체를 deserialize 된 개체에 다시 연결합니다. 이 옵션은 다음 두 가지 이유로 위험합니다 :

    a) 최종 사용자가 게시하지 않거나 서버 상태에서 개체를 지우는 것을 잊어 버린 경우 메모리에서 무기한으로 개체 참조를 유지합니다.

    b)는 대리자를 이전 요청에서 물체에 동작, 그리고 새로운 요구하기 때문에 대리인 참조 페이지 요소 (컨트롤, 등) 당신이 미묘한 버그에 를 실행할 수 있습니다합니다.

+0

내가 의심으로 ... 나는 그것을 시도 줄 기꺼이,하지만 꽤 많이. 해결책 1은 다시 첨부 할 메서드/대리인을 결정하기위한 증거를 저장해야합니다. 해결 방법 1에서 세션이 60 분 후에 시간이 초과되고 해당 시간에 대리인이 서버 상태에서 제거됩니다. 감사합니다. BP – theBruce

+0

세션 시간 초과로 인해 상태가 삭제되고 위임 및 위임하는 개체 그래프가 메모리에 유지됩니다. 그러나 많은 사용자가 방문하는 사이트를 구축하는 경우 서버 리소스에 부담을 줄 수 있습니다. 위임하면 큰 개체 그래프가 요청 사이에 유지됩니다. 또한 각 응답에서 세션 상태를 지우지 않으면 세션 상태 키를 다시 사용하지 않는다고 가정하면 메모리에있는 여러 인스턴스로 끝날 수 있습니다.세션 상태 키를 다시 사용하면 동일한 사용자가 두 번째 창/탭을 열고 상태 충돌을 경험할 위험이 있습니다. – LBushkin

+0

여기에 귀하의 의견을 바탕으로 대리인을 세션 상태로 저장하는 것이 좋습니다. (잘 작동합니다!) 작은 수의 사용자 그래프, 작은 객체 그래프, usercontrol은 ajax modaldialog로 래핑되어 하나 이상의 호출이 불가능합니다. 네! 다시 한 번 감사드립니다. BP – theBruce

관련 문제