示例#1
0
 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);
     }
 }
示例#2
0
        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);
        }
示例#3
0
        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;
 }
示例#5
0
 public MapiTransactionResultToStringCaseNotHandled(MapiTransactionResultEnum result, Exception innerException) : base(Strings.MapiTransactionResultCaseNotHandled(result), innerException)
 {
     this.result = result;
 }
示例#6
0
 public MapiTransactionResultToStringCaseNotHandled(MapiTransactionResultEnum result) : base(Strings.MapiTransactionResultCaseNotHandled(result))
 {
     this.result = result;
 }