本文整理汇总了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();
}
}