我需要在.Net Web应用程序中执行一系列文件系统和数据库操作,如果发生故障,所有事件都会回滚。这些操作是:使用HttpPostedFile 发布文件的一个事务中的ASP.Net数据库和IO操作
- 上传多页TIFF文件到服务器个人图像到数据库
我可以使用3.5框架中的可用类将这些操作包装在单个事务中吗?我应该手动使用try catch块和回滚操作吗?
我需要在.Net Web应用程序中执行一系列文件系统和数据库操作,如果发生故障,所有事件都会回滚。这些操作是:使用HttpPostedFile 发布文件的一个事务中的ASP.Net数据库和IO操作
我可以使用3.5框架中的可用类将这些操作包装在单个事务中吗?我应该手动使用try catch块和回滚操作吗?
Can I wrap these operations in a single transaction using the available classes in the 3.5 framework?
不,不是因为你有一个薄弱环节,任何其他技术。使用HttpPostedFile
发布文件的2.插入记录到数据库
3.Process并保存在服务器上
在多页TIFF作为单独的文件单独的图像1.Upload多页TIFF文件到服务器4.插入单个图像到数据库的记录
2-4可以在现代Windows上的事务中轻松完成 - NTFS可以参与事务。
你的问题是1. 1是不可能的,因为 - 注意 - HTTP没有交易的概念。如果上传发生在你的服务器上,你可能会在Upload CRM(补偿资源管理器)中上传插件,但是你需要能够通过HTTP Too删除它们,以便在回滚的情况下(完全但可选)可见直到你提交。这就是如果API支持IT - 写作(.NET中的CRM非常容易),否则你会死在那里或采取妥协。
如果您上传到您的服务器,然后在一个交易中处理,技术上处理多个图片上传正确,你必须决定transaciotnal控件的位置。上传必须有适当的API来启动一个事务,使用事务标记进行上传,然后在所有上传完成时提交(只有在可以开始处理时)。这对程序来说是微不足道的,甚至在大多数情况下都不使用TPM,因为您可以在处理中滚动逻辑事务。但是如果你愿意,再一次CRM可以处理在回滚情况下的必要变化。
你是对的。我最初的问题应该更清楚。一旦上传的文件(步骤1)完成,我只是试图在事务中将第2步到第4步打包。但是,当我在TransactionScope中将第2步到第4步的操作打包时,我仍然收到错误:事务管理器已禁用其对远程/网络事务的支持。 – kyletme 2012-07-06 04:42:38
好吧,然后去阅读文档并正确配置DTC。这是一个完全不同的问题,而不是你在这里问的问题。默认情况下,它对网络是禁用的(例如,如果SQL Server是远程的,则可能需要),但这是标准配置更改。随意在Serverfault.com上打开一个关于它的地方的问题(因为这是一个配置问题,而不是编程问题)。 – TomTom 2012-07-06 06:25:28
尝试类似如下:
using (TransactionScope scope = new TransactionScope())
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
// Do all work here...
}
catch (Exception ex)
{
// Delete files
// LogError(ex);
}
}
scope.Complete();
}
回滚保存的文件如何?你会删除它们还是什么? – codingbiz 2012-07-06 03:35:35
是的,他必须单独处理这个问题......如果任何数据库操作失败,您可以在事务中进行尝试并将其删除。 – IrishChieftain 2012-07-06 03:37:16
感谢您的反馈 – codingbiz 2012-07-06 03:39:35
使用TransactionScope时,会发生以下错误: 事务管理器已禁用其对远程/网络事务的支持。 此错误在[http://stackoverflow.com/questions/10130767/the-transaction-manager-has-disabled-its-support-for-remote-network-transactions](http://stackoverflow.com/questions-10130767/the-transaction-manager-has-disabled-its-support-for-remote-network-transactions) – kyletme 2012-07-06 04:09:46