首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM+、transactions和ContextUtil.SetAbort()

COM+、transactions和ContextUtil.SetAbort()
EN

Stack Overflow用户
提问于 2012-10-18 20:17:14
回答 1查看 1.2K关注 0票数 2

我得到了一个服务组件,看起来像这样(不是我写的):

代码语言:javascript
复制
[Transaction(TransactionOption.Required, Isolation = TransactionIsolationLevel.Serializable, Timeout = 120), EventTrackingEnabled(true)]
public class SomeComponent : ServicedComponent
{
    public void DoSomething()
    {
        try
        {
            //some db operation
        }
        catch (Exception err)
        {
            ContextUtil.SetAbort();
            throw;
        }
}

真的需要ContextUtil.SetAbort()吗?当组件离开时,异常不会中止事务吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-18 20:24:20

仅当您想要手动管理事务时。

如果您以这种方式使用[AutoComplete]属性修饰您的操作,您的组件将自动投票决定中止(在引发任何异常的情况下)或提交:

代码语言:javascript
复制
[AutoComplete]
public void DoSomething()

编辑:

有关此属性的更多信息,请参见MSDN here

如果方法调用正常返回,则

事务自动调用SetComplete。如果方法调用抛出异常,事务将中止。

无论如何,如果你(在极少数情况下)真的需要手动管理事务,那么不要让你的事务有疑问是非常重要的。我在代码中遗漏了应该显式调用的ContextUtil.SetComplete();

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12954440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档