【发布时间】:2010-05-10 21:04:27
【问题描述】:
我已经实现了一些组件以将 WCF 与 IoC 容器 (StructureMap) 和每次调用的会话模式一起使用。 NHibernate 的东西大部分来自这里:http://realfiction.net/Content/Entry/133。
似乎没问题,但我想在每次调用时打开一个事务并在最后提交,而不仅仅是 Flush(),它在文章中是如何完成的。
这是我遇到一些问题的地方,可以使用一些建议。我还没有找到回滚的好方法。我意识到我可以检查 CommunicationState,如果有异常,则回滚,如下所示:
public void Detach(InstanceContext owner)
{
if (Session != null)
{
try
{
if(owner.State == CommunicationState.Faulted)
RollbackTransaction();
else
CommitTransaction();
}
finally
{
Session.Dispose();
}
}
}
void CommitTransaction()
{
if(Session.Transaction != null && Session.Transaction.IsActive)
Session.Transaction.Commit();
}
void RollbackTransaction()
{
if (Session.Transaction != null && Session.Transaction.IsActive)
Session.Transaction.Rollback();
}
但是,我几乎从不从服务调用返回故障状态。我通常会处理异常并在我的响应对象上返回一个适当的指示符并自己回滚事务。
我能想到的唯一方法是不仅将存储库注入我的 WCF 服务,还注入一个 ISession,这样我就可以回滚并以我想要的方式处理。这不适合我,而且似乎有点漏水。
还有其他人处理同样的问题吗?
【问题讨论】:
-
为什么听起来漏气?
-
对于寻找链接文章的任何人,它都移到了那里:realfiction.net/go/133
标签: wcf nhibernate session transactions rollback