我已经实现了一些组件,将WCF与IoC容器(StructureMap)和Session-per-Call模式一起使用。NHibernate的东西大部分来自这里:
http://realfiction.net/Content/Entry/133
.
在这里我遇到了一些问题,需要一些建议。我还没有想出一个好办法来回退。我知道我可以检查通信状态,如果有异常,回滚,如下所示:
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,这样我就可以回滚并按我想要的方式处理。这对我来说不太合适,似乎有点漏洞百出。
还有其他人在处理同样的问题吗?