//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel { using System; using System.Globalization; using System.Text; using System.Runtime.Serialization; [DataContract] public class ExceptionDetail { string helpLink; ExceptionDetail innerException; string message; string stackTrace; string type; public ExceptionDetail(Exception exception) { if (exception == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("exception"); } this.helpLink = exception.HelpLink; this.message = exception.Message; this.stackTrace = exception.StackTrace; this.type = exception.GetType().ToString(); if (exception.InnerException != null) { this.innerException = new ExceptionDetail(exception.InnerException); } } [DataMember] public string HelpLink { get { return this.helpLink; } set { this.helpLink = value; } } [DataMember] public ExceptionDetail InnerException { get { return this.innerException; } set { this.innerException = value; } } [DataMember] public string Message { get { return this.message; } set { this.message = value; } } [DataMember] public string StackTrace { get { return this.stackTrace; } set { this.stackTrace = value; } } [DataMember] public string Type { get { return this.type; } set { this.type = value; } } public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "{0}\n{1}", SR.GetString(SR.SFxExceptionDetailFormat), this.ToStringHelper(false)); } string ToStringHelper(bool isInner) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("{0}: {1}", this.Type, this.Message); if (this.InnerException != null) { sb.AppendFormat(" ----> {0}", this.InnerException.ToStringHelper(true)); } else { sb.Append("\n"); } sb.Append(this.StackTrace); if (isInner) { sb.AppendFormat("\n {0}\n", SR.GetString(SR.SFxExceptionDetailEndOfInner)); } return sb.ToString(); } } }