使用Linq-2-Sql时出现System.Transactions源警告

8

我已启用 System.Transactions 的日志记录:

<system.diagnostics>
    <sources>
        <source name="System.Transactions" switchValue="Warning">
            -- my listeners here
        </source>
    </sources>
</system.diagnostics>

我看到了很多奇怪的日志警告,例如:

  • 调用事务回滚
  • 登记回调为负
  • TransactionScope不完整

可以请有经验的人给出一些解释吗?我的系统按预期工作,没有引发ADO.NET级别的异常。DAL代码是典型的L2S代码,没有显式的事务管理或任何黑客技巧。


2
你可以使用SQL Profiler来查看发送到服务器的SQL语句,这样你就能更了解正在发生什么。没有更多信息,我们很难给出答案。 - Emond
我监控了分析器输出,没有发现任何问题。我认为生成的SQL语句与此问题无关,因为即使SQL服务器引起了一些警告,它们也不能传播回托管代码,对吗? - UserControl
这取决于(一如既往)这些警告是由数据库还是由.NET代码/L2S触发的? 如果它们是由数据库引起的,您应该检查在那里执行的批处理/存储过程。(我认为它们必须传播到客户端) - Emond
2
可能是您的应用程序上下文中的其他进程或第三方库,交易可能是针对其他内容的,例如,Visual Studio编辑器用于UI设计师也可以在事务中工作,因此许多内部库或进程可能正在事务中工作。这是什么类型的应用程序?桌面、服务还是ASP.NET? - Akash Kava
1
我只是在这里进行猜测——也许 System.Transaction 以为事务将要开始,但实际上没有。TransactionScope 似乎是一种尝试读取开发人员心理的 API。此外,尝试将 switchValue 提高到 Verbose 以获得更完整的存储,并添加一些跟踪输出到您自己的代码中,以获得更完整的信息(即您的代码中的哪些事件与警告相关?) - MatthewMartin
@Akash Kava,这是一个WCF应用程序。 - UserControl
1个回答

1

使用Warning作为switchValue将会捕获更多的错误。来自msdn:

存在一种条件,可能随后导致错误或严重失败(例如,分配失败或接近极限)。来自用户代码的错误的正常处理(例如,事务中止,超时,身份验证失败)也可能生成警告。

也许这正是您想要的。如果是这样,那很好。否则,您可能需要将其更改为Error。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接