为什么我突然收到这个错误?

2023-12-26

所以我有一个 WCF 服务,其中有一个 Process() 方法。此方法从一个表中读取一个字节数组(一个文件),然后基本上将该文件中的数据放入多个表中。它只是迭代每一行。在生产环境一个月以来,它运行良好。现在突然间,它间歇性地抛出这个错误:

System.InvalidOperationException:与当前连接关联的事务已完成但尚未释放。必须先释放事务,然后才能使用连接执行 SQL 语句。

可能有帮助的事情: 大约两周前,我们更换了生产网络和数据库服务器。这个错误是在我们搬家之后才出现的。当我们使用旧服务器时,我从未遇到过这个问题。但问题是,这个错误并不是在前 9-10 天发生的。现在它突然且间歇性地发生。我上传了大文件(1k-2.5k 行)并且它们运行良好,并且对于具有 200 行的小得多的文件会出现此错误!有时服务可以完美地处理同一个文件。

代码片段:(大了很多,但是重复了类似的操作)

using (var scope = new TransactionScope())
{
    // loop through each row/invoice
    foreach (var row in Rows)
    {
        Invoice invoice = (Invoice)CreateObjectWithConstantData(typeof(Invoice), doc, applicationName);
        invoice = (Invoice)FillObjectWithUserData(invoice, row, -1, -1, string.Empty);
        invoice.InvoiceNumber = InvoiceDBImpl.SaveInvoice(invoice, processFileRequest.RunId);

        if (invoice.InvoiceNumber == Guid.Empty)
        {
            throw new DataAccessException(string.Format(Messages.ErrorSavingInvoice, invoice.ReceiptId, invoice.ProductID));
        }
    }
}

堆栈跟踪之一:

   at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
   at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataContext.ExecuteMethodCall(Object instance, MethodInfo methodInfo, Object[] parameters)
   at Tavisca.TramsFileService.DataAccess.TramsDBDataContext.SaveTramsPayment(Nullable`1 paymentDate, String paymentType, Nullable`1 totalAmount, String bankAccount, String paymentMethod, String branch, String remarks, String creditCardLast4, String payeeName, String profileNumber, Nullable`1& paymentId)
   at Tavisca.TramsFileService.DataAccess.PaymentDBImpl.<>c__DisplayClass1.<SavePayment>b__0(TramsDBDataContext dc)
   at Tavisca.TramsFileService.DataAccess.SystemDataContext.PerformOperation(Action`1 action)
   at Tavisca.TramsFileService.DataAccess.PaymentDBImpl.SavePayment(Payment payment)
   at Tavisca.TramsFileService.Core.TramsFileController.ProcessFile(ProcessFileRQ processFileRequest)
   at Tavisca.TramsFileService.ServiceImplementation.TramsFileServiceImpl.ProcessFile(ProcessFileRQ processFileRequest)

我已经通过一些链接:

  1. Link 1 https://stackoverflow.com/questions/11248943/the-transaction-must-be-disposed-before-the-connection-can-be-used-to-execute-sq
  2. Link 2 http://thecodesaysitall.blogspot.in/2012/04/long-running-systemtransactions.html
  3. Link 3 https://stackoverflow.com/questions/11453066/error-the-transaction-associated-with-the-current-connection-has-completed-but

他们都建议增加 machine.config 上的超时,但我不确定为什么它有时有效而有时不起作用。这不应该是一致的吗?


First我建议添加scope.Complete();结束时TransactionScope like :

using (var scope = new TransactionScope())
{
     //Your stuff goes here

     scope.Complete();
}

任何事务都必须在最后一行提交.Complete()功能。

Secondly如果增加TimeOut on the machine.config有效,这样做没有坏处,因为长文件显然需要更多时间。

Thirdly确保内部调用任何其他组件TransactionScope适用于所有积极和消极的情况。通过堆栈跟踪,似乎在特定用例中有些正在破坏函数内部Tavisca.TramsFileService.ServiceImplementation.TramsFileServiceImpl.ProcessFile(ProcessFileRQ processFileRequest)

还要确保内部的任何底层调用是否使用了某个存储过程TransactionScope那么存储过程中任何失败的事务也会导致TransactionScope.

还有一件事,抛出的异常也可能是合法的,因为您在以下情况下手动抛出异常:invoice.InvoiceNumber == Guid.Empty但如果它被处理/捕获或只是传递到上层,则不会提及。

但首先尝试添加scope.Complete();,仅此一项就可能是根本原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我突然收到这个错误? 的相关文章

  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • SQL存储过程执行时间差异

    我在 win form 应用程序中遇到奇怪的问题 我正在调用一个存储过程 并且执行大约需要 6 秒 此存储过程接受多个参数 包括一个输出参数 从应用程序级别我使用 Dim dt1 DateTime Now cmd ExecuteNonQue
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • 带有模板容器的模板类

    如何声明具有不同容器作为模板参数的模板类 适配器 例如 我需要声明类 template
  • Delphi 2009 在 RAD Studio 命令提示符中使用 MSBuild F1026 文件未找到

    在过去的几天里 我一直在努力让 MSBuild 在构建机器上成功构建我的 dproj 文件 首先 我需要来自开发人员计算机的 EnvOptions proj 文件 这让我清除了丢失的 system pas 文件 但现在我收到了缺少 dcu
  • Matplotlib 交互式事件循环

    Matplotlib 如何为 Qt 等后端库设置事件循环 同时仍然允许通过 python REPL 进行交互 至少对于 Qt 来说 主事件循环必须在主线程中运行 但这就是 REPL 所在的位置 对吧 所以我正在努力了解两者如何共存 我当前的
  • 如何获取Keras中预测错误数据的索引?

    我正在做情感分析并使用 keras 来预测电影评论的正面 负面 我想知道的是原始数据 这些数据是我的模型错误预测的 我只能从模型中获得准确性和损失 但我想获得模型预测错误的文本子集 怎么做 import pandas as pd from
  • Jquery datepicker 2个月显示

    我正在使用 jquery ui 日期选择器来显示多个月份 弹出窗口将这些月份显示在其他月份的下方 有没有办法让下个月显示在右侧 我现在正在 datePicker 中处理这个 所以 根据 jQuery datePicker 文档 number
  • 如何从 Jinja2 模板中获取所有未定义的变量?

    我试图从 Jinja2 模板中获取所有未定义的变量 假设我有一个如下所示的模板 tmpstr for row in csv sample row field1 stuff row field2 morestuff row field3 en
  • 如何使用 maven-scala 插件解决依赖项的“错误:错误的符号引用”?

    我正在使用 Scala 和 Slick 构建一个小型数据库查询实用程序 并使用 Maven 作为构建和打包工具 我的代码编译时没有任何语法错误 但构建失败并出现以下错误 INFO maven scala plugin 2 15 0 comp
  • 如何发送和接收广播消息

    我正在尝试在选项卡内的两个活动之间传递数据 我正在尝试使用sendBroadcast 设置断点后我永远不会到达onReceive 显现
  • JavaScript 错误 - 无法调用 null 的方法“appendChild”

    我是 Javascript 以及一般编程 的新手 一直在尝试基本掌握 DOM 的使用 如果这是一个非常基本的错误 我深表歉意 但我环顾四周 找不到答案 我正在尝试使用appendChild方法将标题和一些段落文本添加到下面非常基本的HTML
  • java.lang.IllegalArgumentException:观察者为空

    我的一个应用程序的用户报告了此错误 我对这意味着什么以及如何解决它感到困惑 经过一番谷歌搜索后 仍然没有运气 有人以前见过这个或者知道如何解决它吗 java lang IllegalArgumentException The observe
  • VS 2019 的终端在哪里?

    我正在运行 16 3 4 所以我认为它应该已经包含早期预览版本的更新 这里提到 https devblogs microsoft com visualstudio say hello to the new visual studio ter
  • xreadlines 和 for 循环文件之间的区别

    在 Python 2 7 中有一个文件对象 f open my file r for 循环文件 最常见的方式 和使用xreadlines 功能 for line in f Do something with line and for lin
  • OpenMP:将所有线程分为不同的组

    我想将所有线程分为 2 个不同的组 因为我有两个并行任务要异步运行 例如 如果总共有 8 个线程可用 我希望有 6 个线程专用于任务 1 另外 2 个线程专用于任务 2 如何使用 OpenMP 实现这一目标 这是一份工作OpenMP 嵌套并
  • 使用 Groovy 脚本访问当前 Jenkins 构建

    我创建了一个 Groovy 脚本 用于System Groovy ScriptJenkins 作业中需要访问当前作业的当前版本的步骤 使用 Hudson model 时需要当前版本Cause UpstreamCause将我当前作业的当前版本
  • Windows 10 1703 升级后 Windows Mobile 设备中心停止工作

    我刚刚安装了新的 Windows 10 版本 1703 现在我无法连接任何 Windows CE 设备 因为 Windows Mobile 设备中心 6 1 无法运行 https i stack imgur com 1TRsz png我尝试
  • REST API 和供应商特定内容类型的版本控制

    我读了很多关于 REST API 版本控制的内容 例如在这个线程中 API 版本控制的最佳实践 https stackoverflow com questions 389169 best practices for api versioni
  • Kotlin:通过强制转换修改(不可变)列表,合法吗?

    我们知道 Kotlin 中的列表是不可变的 即您不能像下面那样添加和删除 class TempClass var myList List
  • Vagrant 和 Docker 与微服务

    我有一组微服务 我希望使用 Docker 对其部署进行自动化和标准化 我一直在阅读有关 Vagrant 的内容 并且对使用 Vagrant 设置环境有几个问题 据我所知 Vagrant 用于设置虚拟机 而 Docker 用于创建容器 在虚拟
  • Paypal 付款数据传输 (PDT) 错误 4002

    我正在努力将我的网站与贝宝集成并使其在沙盒模式下工作 我正在 Codeigniter PHP 工作 我已经收到 IPN 通知 工作正常 但似乎无法弄清楚 PDT 出了什么问题 需要它显示正确的确认页面并返回 我已经多次检查身份令牌 确保 h
  • 为什么我突然收到这个错误?

    所以我有一个 WCF 服务 其中有一个 Process 方法 此方法从一个表中读取一个字节数组 一个文件 然后基本上将该文件中的数据放入多个表中 它只是迭代每一行 在生产环境一个月以来 它运行良好 现在突然间 它间歇性地抛出这个错误 Sys