using (SMSEntities db = new SMSEntities()) { try { //Get SMS's to send from Inbox List<Inbox> tmpInbox = (from c in db.Inboxes where c.Status != "NEW" && c.Status != "SUCCESS" select c).ToList();// new { Inbox.InboxID, Inbox.StatusTrackingID, Inbox.Status, Inbox.NoOfAttempts, Inbox.CellNo, Inbox.SourceCellNo, Inbox.Header, Inbox.Message, Inbox.MessageDate, Inbox.AccountID, Inbox.LastAttemptDate }).ToList(); foreach (Inbox tmpInboxIndex in tmpInbox) { bool success = false; //Check status here string SentStatus = CheckSMSSentToProvider(tmpInboxIndex.StatusTrackingID); // Define a transaction scope for the operations. using (TransactionScope transaction = new TransactionScope()) { try { if ((SentStatus == "DELIVERED") || (SentStatus == "NOTFOUND") || (SentStatus == "DELETED") || (SentStatus == "REJECTED") || (SentStatus == "UNDELIVERED")) { //Insert the Log row Log newLog = new Log(); newLog.InboxID = tmpInboxIndex.InboxID; newLog.CellNo = tmpInboxIndex.CellNo; newLog.SourceCellNo = tmpInboxIndex.SourceCellNo; newLog.Message = tmpInboxIndex.Message; newLog.Header = tmpInboxIndex.Header; newLog.MessageDate = tmpInboxIndex.MessageDate; newLog.AccountID = tmpInboxIndex.AccountID; newLog.ProcessedDate = DateTime.Now; newLog.Status = tmpInboxIndex.Status; newLog.StatusTrackingID = tmpInboxIndex.StatusTrackingID; newLog.NoOfAttempts = tmpInboxIndex.NoOfAttempts; newLog.LastAttemptDate = tmpInboxIndex.LastAttemptDate; db.Logs.AddObject(newLog); //Delete the Inbox row if (tmpInbox != null) { var deleteInbox = (from c in db.Inboxes where c.InboxID == tmpInboxIndex.InboxID select c).FirstOrDefault(); if (deleteInbox != null) { db.DeleteObject(deleteInbox); //db.SaveChanges(SaveOptions.DetectChangesBeforeSave); } } } else { //Update inbox status var tmpUpdateInbox = (from c in db.Inboxes where c.InboxID == tmpInboxIndex.InboxID select c).FirstOrDefault(); tmpUpdateInbox.Status = SentStatus; tmpUpdateInbox.NoOfAttempts = tmpInboxIndex.NoOfAttempts + 1; tmpUpdateInbox.LastAttemptDate = DateTime.Now; //db.SaveChanges(SaveOptions.DetectChangesBeforeSave); } // Mark the transaction as complete. transaction.Complete(); success = true; //break; } catch (Exception ex) { // Handle errors and deadlocks here and retry if needed. // Allow an UpdateException to pass through and // retry, otherwise stop the execution. if (ex.GetType() != typeof(UpdateException)) { Console.WriteLine("An error occured. " + "The operation cannot be retried." + ex.Message); break; } // If we get to this point, the operation will be retried. } } if (success) { // Reset the context since the operation succeeded. //db.AcceptAllChanges(); db.SaveChanges(); } } // Dispose the object context. db.Dispose(); } catch (Exception exp) { throw new Exception("ERROR - " + exp.Message.ToString(), exp); } } return true;
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)