protected RemotePermanentException(SerializationInfo info, StreamingContext context) : base(info, context) { RemotePermanentException.Deserialize(info, context, out this.originalFailureType, out this.mapiLowLevelError, out this.wkeClasses, out this.remoteStackTrace); }
public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); RemotePermanentException.Serialize(info, context, this.originalFailureType, this.mapiLowLevelError, this.wkeClasses, this.remoteStackTrace); }
private Exception Reconstruct(VersionInformation serverVersion) { LocalizedException ex = null; Exception innerException = (this.InnerException != null) ? this.InnerException.Reconstruct(serverVersion) : null; if (this.MrsErrorType == MailboxReplicationServiceFault.MRSErrorType.ProxyThrottlingLimitReached) { ex = new MRSProxyConnectionLimitReachedTransientException(this.Message, innerException); } else { WellKnownException ex2 = this.MatchWellKnownException(new WellKnownException[] { WellKnownException.StaticCapacityExceededReservation, WellKnownException.WlmCapacityExceededReservation, WellKnownException.WlmResourceUnhealthy }); if (ex2 != WellKnownException.None) { switch (ex2) { case WellKnownException.StaticCapacityExceededReservation: ex = new StaticCapacityExceededReservationException(this.ResourceName, this.ResourceType, this.Capacity); break; case WellKnownException.WlmCapacityExceededReservation: ex = new WlmCapacityExceededReservationException(this.ResourceName, this.ResourceType, this.WlmResourceKey, this.WlmResourceMetricType, this.Capacity); break; case WellKnownException.WlmResourceUnhealthy: ex = new WlmResourceUnhealthyException(this.ResourceName, this.ResourceType, this.WlmResourceKey, this.WlmResourceMetricType, this.LoadRatio, this.LoadState, this.LoadMetric); break; } } if (ex == null) { if (this.MrsErrorType == MailboxReplicationServiceFault.MRSErrorType.Transient) { ex = new RemoteTransientException(this.Message, innerException); } else { ex = new RemotePermanentException(this.Message, innerException); } } } IMRSRemoteException ex3 = ex as IMRSRemoteException; if (ex3 != null) { ex3.OriginalFailureType = this.ExceptionType; ex3.MapiLowLevelError = this.MapiLowLevelError; ex3.RemoteStackTrace = this.StackTrace; if (this.WKEClasses != null) { ex3.WKEClasses = new WellKnownException[this.WKEClasses.Length + 1]; for (int i = 0; i < this.WKEClasses.Length; i++) { ex3.WKEClasses[i] = (WellKnownException)this.WKEClasses[i]; } ex3.WKEClasses[this.WKEClasses.Length] = WellKnownException.MRSRemote; } else { ex3.WKEClasses = CommonUtils.ClassifyException(ex); } if (serverVersion != null && !serverVersion[17]) { if (!CommonUtils.ExceptionIs(ex, new WellKnownException[] { WellKnownException.MRSMailboxIsLocked }) && (MailboxReplicationServiceFault.DownlevelMailboxIsLockedFailureTypes.Contains(ex3.OriginalFailureType) || this.Message.StringId == MrsStrings.DestMailboxAlreadyBeingMoved.StringId || this.Message.StringId == MrsStrings.SourceMailboxAlreadyBeingMoved.StringId)) { ex3.WKEClasses = new List <WellKnownException>(ex3.WKEClasses) { WellKnownException.MRSMailboxIsLocked }.ToArray(); } if (!CommonUtils.ExceptionIs(ex, new WellKnownException[] { WellKnownException.MapiNotFound }) && ex3.OriginalFailureType == "MapiExceptionNotFound") { ex3.WKEClasses = new List <WellKnownException>(ex3.WKEClasses) { WellKnownException.MapiNotFound }.ToArray(); } } } ex.ErrorCode = this.ErrorCode; return(ex); }