using System;
using System.Security.Permissions;
namespace Csla.Server
{
///
/// This exception is returned from the
/// CallMethod method in the server-side DataPortal
/// and contains the exception thrown by the
/// underlying business object method that was
/// being invoked.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors")]
[Serializable()]
public class CallMethodException : Exception
{
private string _innerStackTrace;
///
/// Get the stack trace from the original
/// exception.
///
///
///
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object,System.Object)")]
public override string StackTrace
{
get
{
return string.Format("{0}{1}{2}",
_innerStackTrace, Environment.NewLine, base.StackTrace);
}
}
///
/// Creates an instance of the object.
///
/// Message text describing the exception.
/// Inner exception object.
public CallMethodException(string message, Exception ex)
: base(message, ex)
{
_innerStackTrace = ex.StackTrace;
}
///
/// Creates an instance of the object for deserialization.
///
/// Serialization info.
/// Serialiation context.
protected CallMethodException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
: base(info, context)
{
_innerStackTrace = info.GetString("_innerStackTrace");
}
///
/// Serializes the object.
///
/// Serialization info.
/// Serialization context.
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods")]
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
{
base.GetObjectData(info, context);
info.AddValue("_innerStackTrace", _innerStackTrace);
}
}
}