/// <summary> /// Does the actual send of a message to a queue /// </summary> /// <param name="item">Work item to send</param> /// <param name="transactional">True if we need a transactional send</param> private void DoSend(MsmqSendWorkItem item, bool transactional) { TraceUtil.WriteInfo("MsmqSendActivity::DoSend({0})", item.Queue); using ( MessageQueue queue = new MessageQueue(item.Queue) ) { MessageQueueTransactionType txType = MessageQueueTransactionType.None; if ( transactional ) txType = MessageQueueTransactionType.Automatic; queue.Send(item.Message, txType); } }
/// <summary> /// Executes the activity /// </summary> /// <param name="context">Execution Context</param> /// <returns>The activity Status</returns> protected override ActivityExecutionStatus Execute(ActivityExecutionContext context) { if ( context == null ) throw new ArgumentNullException("context"); TraceUtil.WriteInfo("MsmqSendActivity::Execute()"); if ( this.MessageToSend != null ) { Message message = new Message(); message.Label = Label; WriteMessageBody(message); MsmqSendWorkItem item = new MsmqSendWorkItem(Queue, message); if ( IsTransactionalQueue ) { WorkflowEnvironment.WorkBatch.Add(this, item); } else { DoSend(item, false); } } return ActivityExecutionStatus.Closed; }