How to “transaction” a IO operation and a database execution?

前端 未结 2 1281
温柔的废话
温柔的废话 2021-01-14 01:57

I have service that contains a processor running, and it do two things:

1- Create a file in a directory.
2- Set your own status to \"Processed\".
         


        
2条回答
  •  余生分开走
    2021-01-14 02:27

    You can use Transactional NTFS (TxF). This provides the ability to perform actions that are fully atomic, consistent, isolated, and durable for file operations.

    It can be intergrated to work with a large number of other transactional technologies. Because TxF uses the new Kernel Transaction Manager (KTM) features, and because the new KTM can work directly with the Microsoft® Distributed Transaction Coordinator (DTC).

    Any technology that can work with DTC as a transaction coordinator can use transacted file operations within a single transaction. This means that you can now enlist transacted file operations within the same transaction as SQL operations, Web service calls via WS-AtomicTransaction, Windows Communication Foundation services via the OleTransactionProtocol, or even transacted MSMQ operations.

    An example of file and database atomic transaction:

    using (connectionDb)
    {
        connectionDb.Open();
        using (var ts = new System.Transactions.TransactionScope())
        {
            try
            {
                File.Copy(sourceFileName, destFileName, overwrite);
                connectionDb.ExecuteNonQuery();
                ts.Complete();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            { }
        }
    }
    

    See the following links for more information:

    TxF on Codeplex

    Msdn reference

    Note: Remember DTC comes with a heavy performance penalty.

提交回复
热议问题