internal void Update(MapiTransactionResultEnum resultEnum, TimeSpan latency, string error, Guid?mailboxGuid, MailboxMiscFlags?mailboxMiscFlags, bool isDatabaseCopyActive) { lock (this.thisLock) { this.Result = new MapiTransactionResult(resultEnum); this.Latency = latency; this.MailboxGuid = mailboxGuid; this.IsArchive = ((mailboxMiscFlags != null) ? new bool?((mailboxMiscFlags & MailboxMiscFlags.ArchiveMailbox) == MailboxMiscFlags.ArchiveMailbox) : null); this.IsDatabaseCopyActive = isDatabaseCopyActive; this.Error = (error ?? string.Empty); } }
private string DiagnoseMapiOperationException(LocalizedException exception, out MapiTransactionResultEnum result) { result = MapiTransactionResultEnum.Failure; bool flag; bool flag2; string result2 = this.DiagnoseMapiOperationException(exception, out flag, out flag2); if (flag) { result = MapiTransactionResultEnum.MdbMoved; } else if (flag2) { result = MapiTransactionResultEnum.StoreNotRunning; } this.diagnosticContext = this.GetDiagnosticContext(exception); return(result2); }
private void Execute(MapiTransactionOutcome transactionOutcome) { ExchangePrincipal mailboxOwner = null; MapiTransactionResultEnum resultEnum = MapiTransactionResultEnum.Failure; string error = string.Empty; TimeSpan latency = TimeSpan.Zero; Guid? mailboxGuid = null; MailboxMiscFlags?mailboxMiscFlags = null; try { if (this.adRecipient == null) { try { string errorStringBasedOnDatabaseCopyState = this.GetErrorStringBasedOnDatabaseCopyState(); if (!string.IsNullOrWhiteSpace(errorStringBasedOnDatabaseCopyState)) { error = errorStringBasedOnDatabaseCopyState; } else { error = Strings.MapiTransactionErrorMsgNoMailbox; } } catch (MapiPermanentException ex) { error = Strings.MapiTransactionDiagnosticStoreStateCheckFailure(this.ShortErrorMsgFromException(ex)); this.diagnosticContext = ex.DiagCtx.ToCompactString(); } catch (MapiRetryableException ex2) { error = Strings.MapiTransactionDiagnosticStoreStateCheckFailure(this.ShortErrorMsgFromException(ex2)); this.diagnosticContext = ex2.DiagCtx.ToCompactString(); } transactionOutcome.Update(MapiTransactionResultEnum.Failure, TimeSpan.Zero, error, mailboxGuid, mailboxMiscFlags, this.isDatabaseCopyActive); } else { try { if (this.adRecipient is ADSystemMailbox) { mailboxOwner = ExchangePrincipal.FromADSystemMailbox(ADSessionSettings.FromRootOrgScopeSet(), (ADSystemMailbox)this.adRecipient, this.targetServer); } else { ADSessionSettings adSessionSettings = this.adRecipient.OrganizationId.ToADSessionSettings(); mailboxOwner = ExchangePrincipal.FromMailboxData(adSessionSettings, this.adRecipient.DisplayName, this.targetServer.Fqdn, this.targetServer.ExchangeLegacyDN, this.adRecipient.LegacyExchangeDN, this.isArchiveMailbox ? ((ADUser)this.adRecipient).ArchiveGuid : ((ADUser)this.adRecipient).ExchangeGuid, this.database.Guid, this.adRecipient.PrimarySmtpAddress.ToString(), this.adRecipient.Id, new List <CultureInfo>(), Array <Guid> .Empty, RecipientType.Invalid, RemotingOptions.AllowCrossSite); } } catch (ObjectNotFoundException ex3) { transactionOutcome.Update(MapiTransactionResultEnum.Failure, TimeSpan.Zero, this.ShortErrorMsgFromException(ex3), mailboxGuid, mailboxMiscFlags, this.isDatabaseCopyActive); this.diagnosticContext = this.GetDiagnosticContext(ex3); return; } MailboxSession mailboxSession = null; Stopwatch stopwatch = Stopwatch.StartNew(); try { if (!this.transactionTimeouted) { try { mailboxSession = MailboxSession.OpenAsAdmin(mailboxOwner, CultureInfo.InvariantCulture, "Client=StoreActiveMonitoring;Action=Test-MapiConnectivity", false, false, !this.isDatabaseCopyActive); } catch (StorageTransientException exception) { error = this.DiagnoseMapiOperationException(exception, out resultEnum); return; } catch (StoragePermanentException exception2) { error = this.DiagnoseMapiOperationException(exception2, out resultEnum); return; } if (!this.transactionTimeouted) { using (Folder.Bind(mailboxSession, DefaultFolderType.Inbox, new PropertyDefinition[] { FolderSchema.ItemCount })) { resultEnum = MapiTransactionResultEnum.Success; error = string.Empty; } mailboxSession.Mailbox.Load(new PropertyDefinition[] { MailboxSchema.MailboxGuid, MailboxSchema.MailboxMiscFlags }); byte[] array = mailboxSession.Mailbox.TryGetProperty(MailboxSchema.MailboxGuid) as byte[]; object obj = mailboxSession.Mailbox.TryGetProperty(MailboxSchema.MailboxMiscFlags); if (array != null && array.Length == 16) { mailboxGuid = new Guid?(new Guid(array)); } if (obj is int) { mailboxMiscFlags = new MailboxMiscFlags?((MailboxMiscFlags)obj); } latency = stopwatch.Elapsed; } } } finally { if (mailboxSession != null) { mailboxSession.Dispose(); } } } } catch (Exception exception3) { error = this.ShortErrorMsgFromException(exception3); } finally { lock (this.timeoutOperationLock) { if (!this.transactionTimeouted) { transactionOutcome.Update(resultEnum, latency, error, mailboxGuid, mailboxMiscFlags, this.isDatabaseCopyActive); } } } }
public MapiTransactionResult(MapiTransactionResultEnum result) { this.result = result; }
public MapiTransactionResultToStringCaseNotHandled(MapiTransactionResultEnum result, Exception innerException) : base(Strings.MapiTransactionResultCaseNotHandled(result), innerException) { this.result = result; }
public MapiTransactionResultToStringCaseNotHandled(MapiTransactionResultEnum result) : base(Strings.MapiTransactionResultCaseNotHandled(result)) { this.result = result; }