c# - Msmq .NET api MessageQueue.Send 不会在预期的地方抛出

标签 c# .net msmq

我是 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(Object) 方法没有为单个参数而不是对象重载(我的意思是任何专门的类型)所以解决方案是你必须首先检查消息是否采用正确的格式然后你必须将它传递给队列。 此外,只有一个与发送方法相关的异常是 MessageQueueException ,它是由于您提供的无效路径和访问消息队列 API 时发生错误而生成的。 欲了解更多信息,您可以浏览 this link 还有MSDN article .

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

相关文章:

c# - 使用 DataContractSerializer 序列化对象

.net - 在生产中使用无工作流的WF规则引擎——实现经验

c# - MSMQ 用于持久性?

c# - 如何将二维数组传递给存储过程?

c# - DbMigrator 不回滚

c# - 如何检查字节数组是否是有效的pdf文件

c# - MSMQ。将邮件正文存储在驱动器上时对其进行加密

.net - 在 sles 11 中运行 .NET

c# - 读取用户的两个输入

caSTLe-windsor - MassTransit 2.6.1 请求/响应模式 - 响应超时