2010-01-03 2 views
2

나는 모든 appdomain에서 처리되지 않은 예외가 appdomain을 제거 할 것이라는 것을 알고있다. 이는 표준 양식이나 콘솔 기반 응용 프로그램에서 처리되지 않은 예외와 다르지 않습니다.예외없이 실패한 작업을 나타내는 방법 (다중 appdomains)?

그렇다면 앱 도메인 경계를 넘을 때 실패한 작업을 어떻게 나타낼 수 있습니까? 현재 상황을 알기 위해 현재 로깅하고 있지만 작업은 메서드 내에서 일어나는 여러 작업 중 하나이며 예외가 없다고 생각하면 그 메서드를 중단 할 것이라고 생각하지 않습니다.

좀 더 구체적으로 설명하기 위해 다른 appdomain에서 생성 된 객체 (프록시)에 문자열 속성을 설정하고 있습니다. 이 작업은 다른 appdomain에서 발생하지만 어떤 이유로 실패하면 다른 작업을 계속하고 싶지 않습니다. 그것들은 모두 하나의 원자 적 조작으로 일어날 필요가 있기 때문에 모두 단일 방법으로 이루어집니다. 작업 중 하나라도 실패하면 전체적으로 원자 작업이 실패해야합니다.

나는 하나 하나를 점검 할 수있는 "마지막 작동 상태"표시기와 같은 것으로 생각했지만, 이는 마치 진흙탕처럼 보입니다. 더 좋은 방법이 있습니까?

답변

1

첫 번째 코드의 호출로 인해 두 번째 AppDomain의 코드가 실행되는 경우 예외를 throw하는 데 문제가 없어야합니다. 내가 아는 한, 런타임은 처리되지 않은 예외로 처리하는 대신 예외를 호출하는 AppDomain으로 다시 전달해야합니다. 나는 이것이 모든 예외가 직렬화 될 수 있다는 권고 이유의 일부라고 생각한다.

+0

이것이 사실이라면, 나는 정말로 내가하고있는 것을 볼 필요가있다. appdomain을 내말없이 언로드해야하므로 나중에 언로드하려고 할 때 "대상 응용 프로그램 도메인이 언로드되었습니다."라는 메시지가 나타납니다. * 더 깊게 파고 들다 * – redman

+0

고통 스럽다 ... 정확히 한 도메인에서 다른 도메인으로 전화하고 있습니까? 나는 그것의 간단한 메소드가 프록시 객체를 호출한다면 예외가 작동해야한다고 확신한다. – Rory

+1

예, Activator.CreateInstance에 의해 생성 된 프록시입니다. 그래서 내가 네가 한 말은 내가 다른 곳에서 볼 필요가 있다는 것을 의미한다고 생각한다. 그 당시에는 의미가있는 것 같았습니다. 그러나 그것이 당신이 모르는 것을 발견하기 위해이 여행을 떠나는 이유입니다. – redman

관련 문제