static void Main() { // Get MSMQ queue name from app settings in configuration string deadLetterQueueName = ConfigurationManager.AppSettings["deadLetterQueueName"]; // Create the transacted MSMQ queue for storing dead message if necessary. if (!MessageQueue.Exists(deadLetterQueueName)) MessageQueue.Create(deadLetterQueueName, true); // Create a proxy with given client endpoint configuration OrderProcessorClient client = new OrderProcessorClient("OrderProcessorEndpoint"); // Create the purchase order PurchaseOrder po = new PurchaseOrder(); po.CustomerId = "somecustomer.com"; po.PONumber = Guid.NewGuid().ToString(); PurchaseOrderLineItem lineItem1 = new PurchaseOrderLineItem(); lineItem1.ProductId = "Blue Widget"; lineItem1.Quantity = 54; lineItem1.UnitCost = 29.99F; PurchaseOrderLineItem lineItem2 = new PurchaseOrderLineItem(); lineItem2.ProductId = "Red Widget"; lineItem2.Quantity = 890; lineItem2.UnitCost = 45.89F; po.orderLineItems = new PurchaseOrderLineItem[2]; po.orderLineItems[0] = lineItem1; po.orderLineItems[1] = lineItem2; //Create a transaction scope. using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) { // Make a queued call to submit the purchase order client.SubmitPurchaseOrder(po); // Complete the transaction. scope.Complete(); } client.Close(); Console.WriteLine(); Console.WriteLine("Press <ENTER> to terminate client."); Console.ReadLine(); }
public void SubmitPurchaseOrder(PurchaseOrder po) { Console.WriteLine("Submitting purchase order did not succeed ", po); MsmqMessageProperty mqProp = OperationContext.Current.IncomingMessageProperties[MsmqMessageProperty.Name] as MsmqMessageProperty; Console.WriteLine("Message Delivery Status: {0} ", mqProp.DeliveryStatus); Console.WriteLine("Message Delivery Failure: {0}", mqProp.DeliveryFailure); Console.WriteLine(); // resend the message if timed out if (mqProp.DeliveryFailure == DeliveryFailure.ReachQueueTimeout || mqProp.DeliveryFailure == DeliveryFailure.ReceiveTimeout) { // re-send Console.WriteLine("Purchase order Time To Live expired"); Console.WriteLine("Trying to resend the message"); // reuse the same transaction used to read the message from dlq to enqueue the message to app. queue orderProcessorService.SubmitPurchaseOrder(po); Console.WriteLine("Purchase order resent"); } }
public static void Add(PurchaseOrder po) { purchaseOrders.Add(po.PONumber, po); }
public void SubmitPurchaseOrder(PurchaseOrder po) { Orders.Add(po); Console.WriteLine("Processing {0} ", po); }