实例化TransactionScope返回null

时间:2009-11-21 23:37:46

标签: vb.net transactions transactionscope

我有一些创建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天,并且没有接近。

1 个答案:

答案 0 :(得分:1)

也许您的MSDTC存在问题?

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

也许向我们展示代码可能会对我们有所帮助?

更新:我有过在异常之前记录引擎无法记录行的经验,这有时是由发布模式重新排序引起的,或者例程没有主动刷新,应用程序在完成之前就会崩溃。 / p>

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

也许多一点代码和这个测试可能会有所帮助?