2011-01-31 2 views
4

컴파일 된 로깅 라이브러리를 사용하는 코드 기반을 상속 받았습니다. 로깅 라이브러리를 업데이트 할 수 없습니다. 이 라이브러리에는 Exception에 대한 세부 정보를 기록하는 메서드가 있습니다. 이 메서드는 단일 Exception을 매개 변수로 사용합니다. 지금은이 시스템에 묶일 모바일 애플리케이션을 구축 중입니다.C#에서 예외 빌드하기

이 모바일 응용 프로그램에서 catch되지 않은 예외를 처리하는 코드 블록이 있습니다. 서버에 기록해야합니다. 하지만 지금은 네트워크를 통해 세부 사항을 문자열 형식으로 만 전달할 수 있습니다. 이 때문에 오류 메시지, 스택 추적 및 기타 문자열을 받아들이는 서비스가 있습니다. 이 문자열을 가져 와서 예외로 변환해야합니다. 그래서이 문자열을 기존의 라이브러리에 전달할 수 있습니다.

어떻게 메시지와 stackTrace를 문자열로 가져 와서 예외로 묶을 수 있습니까? 여기의 도전 과제는 Message 및 StackTrace가 읽기 전용입니다.

감사합니다.

+2

직렬화를 고려해 보셨습니까? –

+0

그것은 무엇을 줄까요? – Aliostad

답변

7

StackTrace 가상이다. 이렇게하면 MessageStackTrace 값을 완벽하게 제어 할 수 있습니다.

+0

내가하는 것과 같은 방법. – chriszero

+0

오버라이드가 도움이되었습니다. 감사! – user564042

1

예외는 직렬화 가능해야 데이터를 직렬화 할 수 있습니다. 그런 다음 나중에 직렬화 해제 할 수 있으며 동일한 예외가 발생해야합니다.

SoapFormatter는 네트워크를 통해 보내거나 적어도 문자열 표현을 제공해야한다고 생각합니다. 로깅 코드에 MyException

public class MyException : Exception { 
    private readonly string stackTrace; 
    public override string StackTrace { get { return this.stackTrace; } } 
    public MyException(string message, string stackTrace) : base(message) { 
     this.stackTrace = stackTrace; 
    } 
} 

다음 통과 경우 : 당신이 당신의 자신의 Exception과 같이 정의 할 수 있도록

+0

전적으로이 사실을 이해하지 못할 수도 있습니다. 내 모바일 애플리케이션은 Java (Android 앱)입니다. Java 예외가 있습니다. 하지만, 내 백엔드 C#입니다. 그래서 수동으로 Exception을 빌드하려고했습니다. – user564042

+0

죄송합니다. 원래 Java에서 예외가 던져 졌음을 알지 못했지만 질문에 언어별로 언급하지 않았습니다. 내 접근 방식은 원래의 예외를 던지기보다는 모든 것을 세부적으로 보내라는 제안이었는데, 이는 여러분이 순전히 C# 인 경우에 효과가 있었을 것입니다. – Ian