Asp.net mvc 我可以在ASP.NET MVC应用程序中使用Async执行Fire和Forget NHibernate保存吗?
我有一个ASP.NET MVC应用程序,它使用NHibernate将数据持久化到SQL Server数据库中 在某些情况下,我希望将条目保存到数据库中(最初由对控制器上的操作方法的调用触发),但不需要阻止调用方Asp.net mvc 我可以在ASP.NET MVC应用程序中使用Async执行Fire和Forget NHibernate保存吗?,asp.net-mvc,nhibernate,asynchronous,c#-5.0,Asp.net Mvc,Nhibernate,Asynchronous,C# 5.0,我有一个ASP.NET MVC应用程序,它使用NHibernate将数据持久化到SQL Server数据库中 在某些情况下,我希望将条目保存到数据库中(最初由对控制器上的操作方法的调用触发),但不需要阻止调用方 尝试在数据库中实现fire-and-forget机制,将数据库调用放入任务中,然后在后台调用它,以便控件可以立即返回给调用方,这样是否“安全”?(或使用BackgroundWorker或“async/await”关键字完成相同的任务)我需要一个解决方案,使NHibernate不会被ASP
尝试在数据库中实现fire-and-forget机制,将数据库调用放入任务中,然后在后台调用它,以便控件可以立即返回给调用方,这样是否“安全”?(或使用BackgroundWorker或“async/await”关键字完成相同的任务)我需要一个解决方案,使NHibernate不会被ASP.NET尝试清理其ISession时绊倒,这是每个请求。我正在使用Autofac进行会话的生命周期管理。我假设数据库操作的生命周期比web请求本身略长,我不确定这会有多顺利;我有一本书。问题是,当您没有正在进行的请求时,整个AppDomain可能会被拆除。另外,考虑数据库插入失败的原因吗?如果您提前返回,则无法将错误通知客户机
可靠的解决方案必须在将成功返回给调用者之前将数据存储在某种持久的位置。这可以直接在数据库中,也可以在某种队列中(稍后由独立工作人员处理)。这样做不安全;我有一本书。问题是,当您没有正在进行的请求时,整个AppDomain可能会被拆除。另外,考虑数据库插入失败的原因吗?如果您提前返回,则无法将错误通知客户机
可靠的解决方案必须在将成功返回给调用者之前将数据存储在某种持久的位置。这可以直接在数据库中,也可以在某种队列中(稍后由独立工作人员处理)。谢谢,Stephen!在我的用例中,偶尔的数据丢失是可以接受的(只要它只与奇怪的AppDomain重启有关,而不只是奇怪的持续错误)。可以理解,这不适合存储客户订单或其他此类重要交易!再次感谢!谢谢你,斯蒂芬!在我的用例中,偶尔的数据丢失是可以接受的(只要它只与奇怪的AppDomain重启有关,而不只是奇怪的持续错误)。可以理解,这不适合存储客户订单或其他此类重要交易!再次感谢!也许您应该首先将数据放入队列(MSMQ),然后从队列中拾取数据并执行保存到数据库?一切都可以在事务中工作,并免费提供事务重试机制。:)也许您应该首先将数据放入队列(MSMQ),然后从队列中拾取数据并执行保存到数据库?一切都可以在事务中工作,并免费提供事务重试机制。:)