本文整理汇总了C#中System.Messaging.MessageQueue.ReceiveById方法的典型用法代码示例。如果您正苦于以下问题:C# MessageQueue.ReceiveById方法的具体用法?C# MessageQueue.ReceiveById怎么用?C# MessageQueue.ReceiveById使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Messaging.MessageQueue
的用法示例。
在下文中一共展示了MessageQueue.ReceiveById方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReturnMessageToSourceQueue
public static void ReturnMessageToSourceQueue(string errorQueueMachine, string errorQueueName, string msmqMessageId)
{
string path = string.Format(@"{0}\private$\{1}", errorQueueMachine, errorQueueName);
MessageQueue errorQueue = new MessageQueue(path);
{
MessagePropertyFilter messageReadPropertyFilter = new MessagePropertyFilter
{
Body = true,
TimeToBeReceived = true,
Recoverable = true,
Id = true,
ResponseQueue = true,
CorrelationId = true,
Extension = true,
AppSpecific = true,
LookupId = true,
};
errorQueue.MessageReadPropertyFilter = messageReadPropertyFilter;
using (TransactionScope scope = new TransactionScope())
{
MessageQueueTransactionType transactionType = MessageQueueTransactionType.Automatic;
Message message = errorQueue.ReceiveById(msmqMessageId, TimeSpan.FromSeconds(5), transactionType);
string fullPath = ReadFailedQueueHeader(message);
using (MessageQueue failedQueue = new MessageQueue(fullPath))
{
failedQueue.Send(message, transactionType);
}
scope.Complete();
}
}
}
示例2: receiveByID
public object receiveByID(string MessageID, string InputQueue)
{
// Open existing queue
using (MessageQueue queue = new MessageQueue(InputQueue))
{
//Peek to find message with the MessageID in the label
while (true)
{
Message[] peekedmessage = queue.GetAllMessages();
foreach (Message m in peekedmessage)
{
if (m.Label.StartsWith(MessageID))
{
using (Message message = queue.ReceiveById(m.Id))
{
RequestGuid = MessageID;
// Gets object type from the message label
Type objType = Type.GetType(message.Label.Split('|')[1], true, true);
// Derializes object from the stream
DataContractSerializer serializer = new DataContractSerializer(objType);
return serializer.ReadObject(message.BodyStream);
}
}
}
System.Threading.Thread.Sleep(10);
}
}
}
示例3: DeleteMessage
public void DeleteMessage(ref GlobalVariables oVar, string FormatType, string MSMQServer, string QueueName, string MessageId,string MessageLabel)
{
string MQPath = FormatType + MSMQServer + "\\" + QueueName;
try
{
MessageQueue oMQueue = new MessageQueue(MQPath);
try
{
oMQueue.ReceiveById(MessageId);
oVar.sStatusMessage = " Message succesfully deleted";
//MessageBox.Show(MessageLabel + " Message succesfully deleted",
// "Message Queuing Admin", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,
"Message Queuing Admin", MessageBoxButtons.OK, MessageBoxIcon.Information);
//MessageBox.Show(ex + "Queue Name is not valid or exist");
oVar.sStatusMessage = ex.Message;
}
oMQueue.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,
"Message Queuing Admin", MessageBoxButtons.OK, MessageBoxIcon.Information);
oVar.sStatusMessage = ex.Message;
}
}
示例4: MoveMessage
static void MoveMessage(Message message, string destinationQueueName, bool leaveCopyInSourceQueue)
{
var sourceQueuePath = message.QueuePath;
var destinationQueuePath = MsmqUtil.GetFullPath(destinationQueueName);
using (var transaction = new MessageQueueTransaction())
{
transaction.Begin();
try
{
var sourceQueue = new MessageQueue(sourceQueuePath) {MessageReadPropertyFilter = DefaultFilter()};
var destinationQueue = new MessageQueue(destinationQueuePath);
var msmqMessage = sourceQueue.ReceiveById(message.Id, transaction);
destinationQueue.Send(msmqMessage, transaction);
if (leaveCopyInSourceQueue)
{
sourceQueue.Send(msmqMessage, transaction);
}
transaction.Commit();
}
catch
{
transaction.Abort();
throw;
}
}
Messenger.Default.Send(new MessageMoved(message, sourceQueuePath, destinationQueuePath, leaveCopyInSourceQueue));
}
示例5: GetMessageFromQueue
public override void GetMessageFromQueue(string messageId, MessageQueue queue, Action<Message> processMethod)
{
using (var transaction = new MessageQueueTransaction())
{
transaction.Begin();
Logger.DebugFormat("Transaction for {0} started.", messageId);
Message message;
try
{
message = queue.ReceiveById(messageId, TimeSpan.FromSeconds(30), transaction);
Logger.DebugFormat("Message with id {0} received.", messageId);
}
catch (Exception ex)
{
transaction.Abort();
Logger.Error(
string.Concat("Failed to receive message with id ", messageId, "transactions aborted.")
, ex);
return;
}
if (message != null)
{
processMethod(message);
}
if (transaction.Status != MessageQueueTransactionStatus.Aborted)
transaction.Commit();
}
}
示例6: MoveTimeoutToMainQueue
/// <summary>
/// Moves the message from the timeout queue to the main queue.
/// </summary>
/// <param name="queue">The queue.</param>
/// <param name="messageId">The message id.</param>
public void MoveTimeoutToMainQueue(MessageQueue queue, string messageId)
{
using (var destinationQueue = new MessageQueue(GetTimeoutQueuePath(), QueueAccessMode.Receive))
{
var message = destinationQueue.ReceiveById(messageId, queue.GetTransactionType());
message.AppSpecific = 0;//reset timeout flag
queue.Send(message, destinationQueue.GetTransactionType());
}
}
示例7: MoveTimeoutToMainQueue
/// <summary>
/// Moves the message from the timeout queue to the main queue.
/// </summary>
/// <param name="queue">The queue.</param>
/// <param name="messageId">The message id.</param>
public void MoveTimeoutToMainQueue(MessageQueue queue, string messageId)
{
var fullSubQueueName = queue.Path + ";timeout";
using (var timeoutQueue = new MessageQueue(fullSubQueueName, QueueAccessMode.Receive))
{
var message = timeoutQueue.ReceiveById(messageId, queue.GetTransactionType());
message.AppSpecific = 0;//reset timeout flag
queue.Send(message, queue.GetTransactionType());
}
}
示例8: ClearSubscriptionStorage
private static void ClearSubscriptionStorage(string subscriptionStorageQueue, string pluginInputQueue)
{
var fullName = MsmqUtilities.GetFullPathWithoutPrefix(subscriptionStorageQueue);
if (!MessageQueue.Exists(fullName)) return;
var queue = new MessageQueue(fullName);
foreach (var message in queue.GetAllMessages())
{
if (message.Label.ToLower().Contains(pluginInputQueue.ToLower()))
{
queue.ReceiveById(message.Id);
}
}
Console.WriteLine("SubscriptionStorage queue {0} successfully cleared", subscriptionStorageQueue);
}
示例9: Main
static void Main(string[] args)
{
MessageQueue myQueue = new MessageQueue(".\\myQueue");
//var mes = myQueue.Receive(new TimeSpan(0, 0, 3));
var timeout = TimeSpan.FromSeconds(1);
MessageEnumerator msgs = myQueue.GetMessageEnumerator2();
while (msgs.MoveNext(timeout))
{
using (var message = myQueue.ReceiveById(msgs.Current.Id, timeout))
{
message.Formatter = new XmlMessageFormatter(new String[] { "System.String,mscorlib" });
string m = message.Body.ToString();
Console.WriteLine(m);
}
}
}
示例10: DeleteMessage
void DeleteMessage(Message message)
{
using (var queue = new MessageQueue(message.QueuePath))
using (var transaction = new MessageQueueTransaction())
{
transaction.Begin();
try
{
queue.ReceiveById(message.Id, transaction);
transaction.Commit();
}
catch
{
transaction.Abort();
throw;
}
}
Messenger.Default.Send(new MessageDeleted(message));
}
示例11: GetMessageFromQueue
public override void GetMessageFromQueue(string messageId, MessageQueue queue, Action<Message> processMethod)
{
Message message;
try
{
message = queue.ReceiveById(messageId, TimeSpan.FromSeconds(30));
Logger.DebugFormat("Message with id {0} received.", messageId);
}
catch (Exception ex)
{
Logger.Error(
string.Concat("Failed to receive message with id ", messageId)
, ex);
return;
}
if (message != null)
{
processMethod(message);
}
}
示例12: Init
private void Init(Address queue)
{
var path = MsmqUtilities.GetFullPath(queue);
var mq = new MessageQueue(path);
if (!mq.Transactional)
throw new Exception("Queue must be transactional.");
storageQueue = mq;
storageQueue.Formatter = new XmlMessageFormatter(new[] {typeof (TimeoutData)});
storageQueue.GetAllMessages().ToList().ForEach(
m =>
{
var td = m.Body as TimeoutData;
if (td == null) //get rid of message
storageQueue.ReceiveById(m.Id, MessageQueueTransactionType.Single);
else //put into lookup
sagaToMessageIdLookup[td.SagaId] = m.Id;
});
}
示例13: RemoveMessageFromQueue
public static void RemoveMessageFromQueue(string queuePath, string messageId, out string errorMessage)
{
// Define default errorMessage
errorMessage = null;
// Connect to the a queue on the local computer.
var myQueue = new MessageQueue(queuePath)
{
Formatter = new BinaryMessageFormatter()
};
try
{
myQueue.ReceiveById(messageId);
}
catch (MessageQueueException e)
{
if (e.MessageQueueErrorCode != MessageQueueErrorCode.IOTimeout)
{
errorMessage = e.Message;
}
}
}
示例14: VerifyMessage
private static void VerifyMessage(MessageQueue q, Message m)
{
var request = m.Body as GetFriendsRequest;
if (request != null && ShouldCancel(request.UserName))
{
// this removes the message from the queue,
// and (apparently) doesn't mess up the queue cursor...
try
{
q.ReceiveById(m.Id, new TimeSpan(0, 0, 30));
}
catch(Exception)
{
Console.WriteLine("Failed to receive (delete) message for " + request);
}
}
}
示例15: Competing_consumers
public void Competing_consumers()
{
queue.Send("a");
var peek1 = queue.Peek();
using (var q2 = new MessageQueue(testQueuePath, QueueAccessMode.Receive))
{
var peek2 = q2.Peek();
q2.ReceiveById(peek2.Id);
}
Assert.Throws<InvalidOperationException>(()=>queue.ReceiveById(peek1.Id))
;
}