MSMQ CreateCursor NullReferenceException

2024-01-01

我有一个网站,它在远程服务器上使用 MSMQ 对待处理的电子邮件进行排队。我可以将消息写入队列,然后在队列上调用 dispose。队列仍然会收到消息,但稍后 GC 会出现并尝试清理,这会导致 IIS 崩溃。这是我在事件日志中看到的内容:

例外:System.NullReferenceException

消息:未将对象引用设置为对象的实例。

堆栈跟踪:at System.Messaging.Cursor.Finalize()

这段代码多年来一直运行良好,但最近才开始出现问题。我已重新启动所有服务器来排除故障,但这并没有帮助。

Edit 1

这是发送消息的代码。QueueFactory只是一个单例,它有一个围绕创建的锁MessageQueue.

using (System.Messaging.MessageQueue queue
    = QueueFactory.Instance.BuildQueue(this.Path))
{
    System.Messaging.Message message = new System.Messaging.Message
    {
        Body = body,
        Formatter = new BinaryMessageFormatter(),
        TimeToBeReceived = this.ExpirationMinutes
    };

    queue.Send(message, label);
}

有一个try-catch围绕这段代码,我知道它永远不会进入catch堵塞。我开始认为这是整个应用程序从 .NET 3.5 升级到 .NET 4.0 时造成的。然而,它开始偶尔发生,但现在每次我向队列写入消息时都会发生。

Edit 2

这是代码BuildQueue

lock (lockHandler)
{
    return new System.Messaging.MessageQueue(queuePath);
}

尝试使用事务:

using (System.Messaging.MessageQueue queue
    = QueueFactory.Instance.BuildQueue(this.Path))
{
    System.Messaging.Message message = new System.Messaging.Message
    {
        Body = body,
        Formatter = new BinaryMessageFormatter(),
        TimeToBeReceived = this.ExpirationMinutes
    };

    MessageQueueTransaction transaction = new MessageQueueTransaction();

    try
    {
        transaction.Begin();
        queue.Send(message, label, transaction);
        transaction.Commit();
    }
    catch(System.Exception e)
    {
        transaction.Abort();
        throw e;
    }
    finally
    {
        transaction.Dispose();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MSMQ CreateCursor NullReferenceException 的相关文章

随机推荐

  • Visual Studio 智能感知无法在一个 .ascx 文件中工作

    我在 ASP NET MVC 项目的同一文件夹中有两个 ascx 文件 其中之一智能感知工作正常 在另一种情况下 它根本不起作用 有任何想法吗 这些文件非常相似 顶部有相同的 control 定义 使用VS2008和C 尝试重建您的项目 智
  • 使用 FTPClient Java 检索文件内容

    我使用commons FTPCLIENT 我只想从 ftp 服务器获取文件内容 我不想将其写入临时文件 有什么办法可以做到这一点吗 fileoutputstream 应始终指向本地文件 提前致谢 Use FTPClient retrieve
  • 如何使用 git filter-repo 修改远程历史记录?

    过去我用过git filter branch从我的 git 历史记录中删除文件 接下来 我可以强制推送来更新远程存储库 例如 从本地存储库中删除所有 HTML 文件 然后重写远程文件以反映更改 git filter branch force
  • PowerShell 和全局函数

    为什么下面的代码不起作用 根据这篇文章 全局的用法应该是正确的 http technet microsoft com en us library ff730957 aspx http technet microsoft com en us
  • 显示原始值 Entity Framework 7

    我有一个跟踪添加 删除和修改的审核表 我在实体框架内跟踪这一点 而不是使用数据库触发器 原因有多种 但实际上是因为我们使用进程帐户 并且我想跟踪哪些用户对该记录进行了物理更改 我在 EF 5 中使用过此功能 但我不记得在 EF6 中也可以使
  • 在 C++20 模块中用于打破循环依赖的前向声明不起作用

    我已经在这个问题上绞尽脑汁好几天了 我读了很多关于新的 C 20 模块的文档和帖子 其中这个官方的 http www open std org jtc1 sc22 wg21 docs papers 2019 p1103r3 pdf this
  • SpriteKit 的 SKPhysicsBody 与多边形辅助工具

    我想知道是否有一个工具可以用来在 SpriteKit 中轻松生成复杂的物理体 我想要一个具有多边形形状的基于体积的物理实体 SpriteKit 允许使用该方法创建这样的物体 SKPhysicsBody bodyWithPolygonFrom
  • 在 Kotlin 中将元素添加到列表开头的最佳方法是什么

    如果我有一张这样的清单 var foo mutableListOf John Wayne 如果我想在列表顶部添加一个元素 到目前为止我正在考虑两个选项 First foo add 0 Twyla Second foo mutableList
  • c++构造对象时小括号和大括号有什么区别

    有什么区别 and 构造对象时 我认为 应该只支持initializer list或数组 但是当我在片段下方运行时 我感到困惑 include
  • 'This' 在 subscribe 中未定义

    我有一个订阅语句 我正在尝试调试它 但是当我在 VS Code 中单步执行时 this 在语句内始终未定义 在这种情况下 this dataLoaded 未定义 调试时如何让它不被定义 this router events filter e
  • 使用 sed 命令删除绝对路径

    我有包含以下上下文的文件 例如 abc include home user file txt some text 我需要删除包含以及包含后的完整路径 我使用了以下命令删除包含但没有删除路径 sed i r s include g 文件名 我
  • 如何在 JNI 中将 int 转换为 String(?)?

    我有一个int 数组 我想将它的每个元素转换为String in JNI 最后将它们连接为String 包括逗号 例如 java code int testIntArray new int 1 2 3 String arrayString
  • Anaconda 没有响应

    更新所有软件包后 我无法打开 Anaconda Navigator 当我点击 Anaconda 时 我什么也没得到 它既不响应也不给我错误 先感谢您 Anaconda 或 Miniconda 版本 康达 4 5 12 操作系统 MacOs
  • 使用 Java 8 流的反向映射结构

    给定一个类 public class MyClass public int langId public int sectionId 如果我有一个映射 将 LangId 映射到具有该 LangId 的 MyClass 的所有实例 Map
  • 在 Python 中存储超过 9,000 位的大数字

    我计划在 Python 中使用非常大的数字 但想知道 Python 是否可以处理非常大的数字 这些数字最多有 3 000 个零 而且 带有 3 000 个 0 的 1 需要多少字节 第三个问题 如何使用 Python 将数字作为整数保存到文
  • 如何在 JavaFX 线程之外更新 TableView 项目

    我有一个列出用户朋友的表视图 我需要使用从数据库检索的数据每 5 秒更新一次 这是我使用的代码 Main java private List
  • 解析为 false 的媒体查询的链接标签是否仍会被下载?

    给定以下链接标签
  • 如何将链接本地地址绑定到 ipv6 套接字

    这个问题可以看作是一个姐妹问题前一个 https stackoverflow com questions 2455762 why cant i bind ipv6 socket to a linklocal address我自己发布的 非常
  • 如何在 Retrofit Callback 中调用意图?

    我想在由 Retrofit 调用的 WebService 成功回调时显示一个新活动 而且我很难找到有关如何使用 Retrofit 回调结果启动新活动的示例 这是一个好方法吗 我需要先清理一些东西吗 public void validate
  • MSMQ CreateCursor NullReferenceException

    我有一个网站 它在远程服务器上使用 MSMQ 对待处理的电子邮件进行排队 我可以将消息写入队列 然后在队列上调用 dispose 队列仍然会收到消息 但稍后 GC 会出现并尝试清理 这会导致 IIS 崩溃 这是我在事件日志中看到的内容 例外