当前位置: 首页>>代码示例>>C#>>正文


C# IDaoFactory.GetDeliveryLogDao方法代码示例

本文整理汇总了C#中IDaoFactory.GetDeliveryLogDao方法的典型用法代码示例。如果您正苦于以下问题:C# IDaoFactory.GetDeliveryLogDao方法的具体用法?C# IDaoFactory.GetDeliveryLogDao怎么用?C# IDaoFactory.GetDeliveryLogDao使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IDaoFactory的用法示例。


在下文中一共展示了IDaoFactory.GetDeliveryLogDao方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: SendMails

		public void SendMails(IDaoFactory daoFactory)
        {
		    try
		    {
                var deliveryToSend = daoFactory.GetDeliveryPoDao().GetDeliveryToSend();
		        if (deliveryToSend != null && !SendingDeliveryId.Contains(deliveryToSend.Id))
		        {
		            initialize(deliveryToSend.SenderEmail == ConfigurationManager.AppSettings["MailFrom"]
		                ? null
		                : daoFactory.GetAziendaDao().GetById(deliveryToSend.IdAzienda, false));

		            if (deliveryToSend.AttemptNumber >= deliveryToSend.MaxRetry)
		            {
		                deliveryToSend.State = StatoDelivery.Bloccato;
		                daoFactory.GetDeliveryPoDao().SaveOrUpdate(deliveryToSend);
                        SendingDeliveryId.Remove(deliveryToSend.Id); 
                        deliveryToSend = daoFactory.GetDeliveryPoDao().GetDeliveryToSend();
                    }

		            if (deliveryToSend != null && !SendingDeliveryId.Contains(deliveryToSend.Id))
		            {
                        var log = new DeliveryLog(deliveryToSend, $"Iniziato l'invio della spedizione di tipo '{deliveryToSend.Type}' - #{deliveryToSend.Id}");

                        deliveryToSend.AttemptNumber++;
                        SendingDeliveryId.Add(deliveryToSend.Id);
                        deliveryToSend.State = StatoDelivery.InSpedizione;
                        var retryIndex = 0;
                        bool allSented;

                        // Finchè tutte le mail sono spedite oppure viene raggiunto il numero massimo di tentativi cerco di spedire tutte le mail accodate
                        do
                        {
                            allSented = true;
                            var index = 0;
                            foreach (var deliveryMessage in deliveryToSend.Messages)
                            {
                                var deliveryMessagePo = deliveryMessage as DeliveryMessagePo;
                                if (deliveryMessagePo != null)
                                {
                                    if (deliveryMessagePo.SendingDate == null)
                                    {
                                        var sendArgs = SendMail(deliveryMessagePo);

                                        if (sendArgs.Exception == null)
                                        {
                                            deliveryMessagePo.SendingDate = DateTime.Now;
                                            deliveryMessagePo.Smtp = sendArgs.Smtp;
                                            deliveryMessagePo.AttemptNumber = retryIndex;
                                        }
                                        else
                                        {
                                            deliveryMessagePo.Exception += sendArgs.Exception.Message;
                                            allSented = false;
                                        }
                                        index++;

                                        // Attesa prima di spedire la nuova mail
                                        if(deliveryToSend.Messages.Count > index)
                                            Thread.Sleep(5000);
                                    }
                                }
                                else
                                {
                                    var fatalException = new InvalidCastException($"Fallito il cast di un oggetto DeliveryMessage a DeliveryMessagePo#{deliveryMessage.Id}");
                                    _log.FatalFormat("Fallito il cast di un oggetto DeliveryMessage", fatalException);
                                    throw fatalException;
                                }
                            }

                            retryIndex++;

                        } while (!allSented && retryIndex < deliveryToSend.MaxRetry);

                        if (allSented)
                            deliveryToSend.State = StatoDelivery.Spedito;

                        deliveryToSend.EndSendingDate = DateTime.Now;
                        SendingDeliveryId.Remove(deliveryToSend.Id);
                        daoFactory.GetDeliveryPoDao().SaveOrUpdate(deliveryToSend);

                        var logFine = new DeliveryLog(deliveryToSend, string.Format("Finito l'invio della spedizione di tipo '{0}' - Sono stati elaborati {2} messaggi ({3} non inviati per errori) - #{1}", deliveryToSend.Type, deliveryToSend.Id, deliveryToSend.Messages.Count, deliveryToSend.Messages.Cast<DeliveryMessagePo>().Count(item => item.SendingDate == null)));
                        daoFactory.GetDeliveryLogDao().SaveOrUpdate(logFine);		                
		            }

		        }

                daoFactory.GetDeliveryPoDao().CommitChanges();
		    }
		    catch (Exception ex)
		    {
		        _log.FatalFormat("Invio non riuscito - {0}", ex, Library.Utility.GetMethodDescription());
		    }
		    finally
		    {
		        SendingDeliveryId.Clear();
		    }

		}
开发者ID:gipasoft,项目名称:Sfera,代码行数:98,代码来源:MailSenderService.cs


注:本文中的IDaoFactory.GetDeliveryLogDao方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。