73 lines
2.7 KiB
C#

using System;
using System.Security.Permissions;
namespace Csla.Server
{
/// <summary>
/// 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.
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1032:ImplementStandardExceptionConstructors")]
[Serializable()]
public class CallMethodException : Exception
{
private string _innerStackTrace;
/// <summary>
/// Get the stack trace from the original
/// exception.
/// </summary>
/// <value></value>
/// <returns></returns>
/// <remarks></remarks>
[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);
}
}
/// <summary>
/// Creates an instance of the object.
/// </summary>
/// <param name="message">Message text describing the exception.</param>
/// <param name="ex">Inner exception object.</param>
public CallMethodException(string message, Exception ex)
: base(message, ex)
{
_innerStackTrace = ex.StackTrace;
}
/// <summary>
/// Creates an instance of the object for deserialization.
/// </summary>
/// <param name="info">Serialization info.</param>
/// <param name="context">Serialiation context.</param>
protected CallMethodException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
: base(info, context)
{
_innerStackTrace = info.GetString("_innerStackTrace");
}
/// <summary>
/// Serializes the object.
/// </summary>
/// <param name="info">Serialization info.</param>
/// <param name="context">Serialization context.</param>
[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);
}
}
}