我对Msmq相当陌生,我不了解交易的方式。

因此,假设我有一个事务队列,并且向它发送一条消息,但未指定该方法不会抛出的任何事务,并且消息无处可去。该文件说-

“如果使用此重载将消息发送到事务性队列,则消息将被发送到死信队列”。

但是我在系统队列的任何地方都看不到该消息。

此代码供参考-

  var path = @".\private$\transactionalQ";
  if (MessageQueue.Exists(path))
    MessageQueue.Delete(path);
  var q = MessageQueue.Create(path, false);

  q.Send("non transactional message");


将事务性消息发送到非事务性队列时,我看到类似的行为。

如果我做一些意外的事情,我希望方法调用会抛出。我想念什么吗?

最佳答案

您的做法是正确的,但是在MessageQueue.Send方法中没有任何区分过渡消息和非过渡消息的功能。
    MessageQueue.Send(对象)
方法不会针对单个参数而不是对象(我是指任何专门的类型)不重载,因此解决方案是您必须首先检查消息的格式是否正确,然后将其传递给队列。
另外,只有与Send Method相关的一个异常是MessageQueueException,它是由于您提供的无效路径而生成的,并且在访问消息队列API时发生了错误。
有关更多信息,您可以通过this link
还有MSDN article

关于c# - Msmq .NET API MessageQueue.Send不会在预期的地方抛出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8988006/

10-11 02:04