0

我有一些创建 TransactionScope 实例的 VB.NET 代码:

LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "About to associate call data with contracts")
Using ts = New TransactionScope()
    LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "Getting all unimported SatCom calls")

我的应用程序在调用创建新 TransactionScope 时抛出异常,“对象引用未设置为对象的实例。”。我的开发机器或测试机器上没有抛出异常;只在客户的生产机器上,我不知道为什么。我已经在这条线之前和之后放置了调试线,所以我很肯定是这条线导致了问题。

A 在整个应用程序中都使用了 TransactionScopes,这是在客户端计算机上引发异常的唯一地方。

“关于将呼叫数据与合同相关联”被写入日志,下一个日志条目是“对象引用未设置为对象的实例”。

如果我将其移出事务,代码可以正常工作。

我已经为此苦苦挣扎了 4 天,而且还没有接近。

4

1 回答 1

1

也许您对 MSDTC 有疑问?

不过,我更倾向于编码错误,因为 TransactionScope 对象应该被初始化且非空,但它会指示错误。

也许向我们展示代码可能会帮助我们进一步?

更新:我有过日志引擎在异常之前未能记录该行的经验,这有时是由发布模式重新排序引起的,或者例程没有主动刷新并且应用程序在完成之前就崩溃了。

我建议在 using() 语句之后直接放置一个日志记录行,以断言 TransactionScope 不为空。鉴于您使用代码的方式,该代码的结果不可能返回 null,如果构造函数失败,则构造函数必须抛出异常,否则您有一个非 null 事务范围。

也许更多的代码,这个测试可能会帮助更多?

于 2009-11-21T23:53:25.047 回答