Basic Requirements:
1. Have the MSDTC(Distributed Transaction Coordinator) windows service running on your machine
2. Be talking to a SQL 2000 or 2005 Database configured likewise
3. Run this registry script to fix the windows XP SP2 that was causing MSDTC to fail (save as “.reg”)
Registry Script
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\RPC] "RestrictRemoteClients"=dword:00000000 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet] "Ports"=hex(7):31,00,30,00,32,00,35,00,2d,00,31,00,30,00,35,00,35,00,00,00,00,\ 00 "PortsInternetAvailable"="Y" "UseInternetPorts"="Y"
You can create a class/library to wrap the transaction code
Code:
using System; using System.Data; using System.Transactions; namespace BusinessLayer { public class TransactionScopeWrapper : IDisposable { private TransactionScope _scope = null; public TransactionScopeWrapper() { if (ConfigHelper.UseTransactionScope) { int timeout = ConfigHelper.TransactionTimeoutMinutes; if (timeout == int.MinValue) { timeout = 10; } _scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, timeout, 0)); } } public void Complete() { if (_scope != null) { _scope.Complete(); } } #region IDisposable Members public void Dispose() { if (_scope != null) { _scope.Dispose(); } } #endregion } }
Usage of the wrapper:
public void CancelAuction(int auctionid) { using (TransactionScopeWrapper scope = new TransactionScopeWrapper()) { tdsAuction.AuctionDataTable auctionTable = AuctionAdapter.AuctionSelect(auctionid); if (auctionTable.Rows.Count > 0) { tdsAuction.AuctionRow auctionRow = auctionTable.Rows[0] as tdsAuction.AuctionRow; auctionRow.AuctionStatusID = (int)AuctionStatusEnum.Cancelled; AuctionAdapter.Update(auctionRow); // return the Stock to inventory if (auctionRow.IsAuction) { InventoryData.InventoryReturnLotsCancelAuction(auctionid); } else { InventoryData.InventoryReturnLotsForDeal(auctionid); } } scope.Complete(); } }
Leave a Reply