Exemplo n.º 1
0
 public override SubmissionItem CreateSubmissionItem(MailItemSubmitter context)
 {
     return(new MapiSubmissionItem(this, context, this.storeDriverTracer));
 }
Exemplo n.º 2
0
 internal StoreDriverSubmissionEventArgsImpl(MailItem mailItem, SubmissionItem submissionItem, MailItemSubmitter mailItemSubmitter)
 {
     this.mailItem          = mailItem;
     this.submissionItem    = submissionItem;
     this.mailItemSubmitter = mailItemSubmitter;
 }
Exemplo n.º 3
0
        public Exception CallDoneWithMessageWithRetry(StoreSession session, MessageItem item, int retryCount, MailItemSubmitter context)
        {
            TraceHelper.MapiStoreDriverSubmissionTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Move message from outbox");
            Exception result = null;

            ExTraceGlobals.FaultInjectionTracer.TraceTest(3689295165U);
            if (!session.Capabilities.CanSend)
            {
                string message = "Store session does not have CanSend capability, DoneWithMessage is not called.";
                TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail(TraceHelper.MessageProbeActivityId, 0L, message);
                return(new InvalidOperationException(message));
            }
            for (int i = 0; i < retryCount; i++)
            {
                ExDateTime dt = (context == null) ? default(ExDateTime) : ExDateTime.UtcNow;
                try
                {
                    session.DoneWithMessage(item);
                    return(null);
                }
                catch (StoragePermanentException ex)
                {
                    TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail <StoragePermanentException>(TraceHelper.MessageProbeActivityId, 0L, "DoneWithMessage failed with permanent exception {0}", ex);
                    result = ex;
                }
                catch (StorageTransientException ex2)
                {
                    TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail <int, StorageTransientException>(TraceHelper.MessageProbeActivityId, 0L, "DoneWithMessage failed at attempt {0} with transient exception {1}", i, ex2);
                    result = ex2;
                    if (retryCount - 1 > i)
                    {
                        Thread.Sleep(TimeSpan.FromMilliseconds((double)(i * 10)));
                    }
                }
                finally
                {
                    if (context != null)
                    {
                        TimeSpan additionalLatency = ExDateTime.UtcNow - dt;
                        context.AddRpcLatency(additionalLatency, "Done with message");
                    }
                }
            }
            return(result);
        }