Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Util / Transactions.cs / 1305376 / Transactions.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Transactions support for ASP.NET pages * * Copyright (c) 2000, Microsoft Corporation */ namespace System.Web.Util { using System.Collections; using System.EnterpriseServices; using System.Security.Permissions; // // Delegate to the transacted managed code // ////// public delegate void TransactedCallback(); // // Delegate for the internal transacted execution // internal enum TransactedExecState { CommitPending = 0, AbortPending = 1, Error = 2 } internal delegate int TransactedExecCallback(); // return value 'int' for interop // // Utility class with to be called to do transactions // ///[To be supplied.] ////// public class Transactions { ///[To be supplied.] ////// public static void InvokeTransacted(TransactedCallback callback, TransactionOption mode) { bool aborted = false; InvokeTransacted(callback, mode, ref aborted); } ///[To be supplied.] ////// public static void InvokeTransacted(TransactedCallback callback, TransactionOption mode, ref bool transactionAborted) { // check for hosting permission even if no user code on the stack HttpRuntime.CheckAspNetHostingPermission(AspNetHostingPermissionLevel.Medium, SR.Transaction_not_supported_in_low_trust); bool executeWithoutTransaction = false; #if !FEATURE_PAL // FEATURE_PAL does not enable Transactions if (Environment.OSVersion.Platform != PlatformID.Win32NT || Environment.OSVersion.Version.Major <= 4) throw new PlatformNotSupportedException(SR.GetString(SR.RequiresNT)); #else // !FEATURE_PAL throw new NotImplementedException("ROTORTODO"); #endif // !FEATURE_PAL if (mode == TransactionOption.Disabled) executeWithoutTransaction = true; if (executeWithoutTransaction) { // bypass the transaction logic callback(); transactionAborted = false; return; } TransactedInvocation call = new TransactedInvocation(callback); TransactedExecCallback execCallback = new TransactedExecCallback(call.ExecuteTransactedCode); PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_PENDING); int rc; try { rc = UnsafeNativeMethods.TransactManagedCallback(execCallback, (int)mode); } finally { PerfCounters.DecrementCounter(AppPerfCounter.TRANSACTIONS_PENDING); } // rethrow the expection originally caught in managed code if (call.Error != null) throw new HttpException(null, call.Error); PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_TOTAL); if (rc == 1) { PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_COMMITTED); transactionAborted = false; } else if (rc == 0) { PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_ABORTED); transactionAborted = true; } else { throw new HttpException(SR.GetString(SR.Cannot_execute_transacted_code)); } } // Class with wrappers to ContextUtil that don't throw internal class Utils { private Utils() { } /* internal static String TransactionId { get { String id = null; try { id = ContextUtil.TransactionId.ToString(); } catch { } return id; } } */ internal static bool IsInTransaction { get { bool inTransaction = false; try { inTransaction = ContextUtil.IsInTransaction; } catch { } return inTransaction; } } internal static bool AbortPending { get { bool aborted = false; try { if (ContextUtil.MyTransactionVote == TransactionVote.Abort) aborted = true; } catch { } return aborted; } } } // Managed class encapsulating the transacted call internal class TransactedInvocation { private TransactedCallback _callback; private Exception _error; internal TransactedInvocation(TransactedCallback callback) { _callback = callback; } internal int ExecuteTransactedCode() { TransactedExecState state = TransactedExecState.CommitPending; try { _callback(); if (Transactions.Utils.AbortPending) state = TransactedExecState.AbortPending; } catch (Exception e) { _error = e; // remember exception to be rethrown back in managed code state = TransactedExecState.Error; } return (int)state; } internal Exception Error { get { return _error; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Transactions support for ASP.NET pages * * Copyright (c) 2000, Microsoft Corporation */ namespace System.Web.Util { using System.Collections; using System.EnterpriseServices; using System.Security.Permissions; // // Delegate to the transacted managed code // ////// public delegate void TransactedCallback(); // // Delegate for the internal transacted execution // internal enum TransactedExecState { CommitPending = 0, AbortPending = 1, Error = 2 } internal delegate int TransactedExecCallback(); // return value 'int' for interop // // Utility class with to be called to do transactions // ///[To be supplied.] ////// public class Transactions { ///[To be supplied.] ////// public static void InvokeTransacted(TransactedCallback callback, TransactionOption mode) { bool aborted = false; InvokeTransacted(callback, mode, ref aborted); } ///[To be supplied.] ////// public static void InvokeTransacted(TransactedCallback callback, TransactionOption mode, ref bool transactionAborted) { // check for hosting permission even if no user code on the stack HttpRuntime.CheckAspNetHostingPermission(AspNetHostingPermissionLevel.Medium, SR.Transaction_not_supported_in_low_trust); bool executeWithoutTransaction = false; #if !FEATURE_PAL // FEATURE_PAL does not enable Transactions if (Environment.OSVersion.Platform != PlatformID.Win32NT || Environment.OSVersion.Version.Major <= 4) throw new PlatformNotSupportedException(SR.GetString(SR.RequiresNT)); #else // !FEATURE_PAL throw new NotImplementedException("ROTORTODO"); #endif // !FEATURE_PAL if (mode == TransactionOption.Disabled) executeWithoutTransaction = true; if (executeWithoutTransaction) { // bypass the transaction logic callback(); transactionAborted = false; return; } TransactedInvocation call = new TransactedInvocation(callback); TransactedExecCallback execCallback = new TransactedExecCallback(call.ExecuteTransactedCode); PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_PENDING); int rc; try { rc = UnsafeNativeMethods.TransactManagedCallback(execCallback, (int)mode); } finally { PerfCounters.DecrementCounter(AppPerfCounter.TRANSACTIONS_PENDING); } // rethrow the expection originally caught in managed code if (call.Error != null) throw new HttpException(null, call.Error); PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_TOTAL); if (rc == 1) { PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_COMMITTED); transactionAborted = false; } else if (rc == 0) { PerfCounters.IncrementCounter(AppPerfCounter.TRANSACTIONS_ABORTED); transactionAborted = true; } else { throw new HttpException(SR.GetString(SR.Cannot_execute_transacted_code)); } } // Class with wrappers to ContextUtil that don't throw internal class Utils { private Utils() { } /* internal static String TransactionId { get { String id = null; try { id = ContextUtil.TransactionId.ToString(); } catch { } return id; } } */ internal static bool IsInTransaction { get { bool inTransaction = false; try { inTransaction = ContextUtil.IsInTransaction; } catch { } return inTransaction; } } internal static bool AbortPending { get { bool aborted = false; try { if (ContextUtil.MyTransactionVote == TransactionVote.Abort) aborted = true; } catch { } return aborted; } } } // Managed class encapsulating the transacted call internal class TransactedInvocation { private TransactedCallback _callback; private Exception _error; internal TransactedInvocation(TransactedCallback callback) { _callback = callback; } internal int ExecuteTransactedCode() { TransactedExecState state = TransactedExecState.CommitPending; try { _callback(); if (Transactions.Utils.AbortPending) state = TransactedExecState.AbortPending; } catch (Exception e) { _error = e; // remember exception to be rethrown back in managed code state = TransactedExecState.Error; } return (int)state; } internal Exception Error { get { return _error; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ContainerControl.cs
- SmtpTransport.cs
- Assembly.cs
- ConditionalAttribute.cs
- PriorityBinding.cs
- TraceSwitch.cs
- DataBoundControlAdapter.cs
- SectionInformation.cs
- DbConnectionPoolGroupProviderInfo.cs
- ScriptManager.cs
- CorePropertiesFilter.cs
- FileNameEditor.cs
- SiteMembershipCondition.cs
- Interlocked.cs
- ICollection.cs
- ObjectStateManager.cs
- BuildManager.cs
- EditableTreeList.cs
- MetadataUtilsSmi.cs
- AppliedDeviceFiltersDialog.cs
- CollectionChangedEventManager.cs
- WebPartEditorApplyVerb.cs
- ConfigXmlAttribute.cs
- DoubleCollectionValueSerializer.cs
- Activity.cs
- PointCollectionValueSerializer.cs
- MimeTextImporter.cs
- TrustLevelCollection.cs
- _BaseOverlappedAsyncResult.cs
- AppSettingsReader.cs
- PageThemeParser.cs
- FtpRequestCacheValidator.cs
- NullableDoubleAverageAggregationOperator.cs
- FrameworkContentElement.cs
- TextTreeInsertUndoUnit.cs
- SqlCommandSet.cs
- InArgumentConverter.cs
- FusionWrap.cs
- DataGridCell.cs
- DataBindingHandlerAttribute.cs
- BinaryFormatter.cs
- VisualTarget.cs
- InvalidPrinterException.cs
- Bits.cs
- DataGridViewCellValueEventArgs.cs
- RecognizedPhrase.cs
- ConfigurationManager.cs
- AlphabeticalEnumConverter.cs
- ThicknessAnimationUsingKeyFrames.cs
- login.cs
- FlowDocumentPaginator.cs
- SettingsSection.cs
- TableParaClient.cs
- TypeForwardedToAttribute.cs
- GridItemPattern.cs
- Gdiplus.cs
- COM2PropertyDescriptor.cs
- NamespaceEmitter.cs
- ByteAnimationUsingKeyFrames.cs
- DetailsViewUpdatedEventArgs.cs
- DoubleCollectionConverter.cs
- Function.cs
- regiisutil.cs
- StdValidatorsAndConverters.cs
- AutomationElementCollection.cs
- ThrowHelper.cs
- BaseCollection.cs
- brushes.cs
- HideDisabledControlAdapter.cs
- SqlDataSourceTableQuery.cs
- AdornedElementPlaceholder.cs
- DoubleCollectionValueSerializer.cs
- BrowserDefinitionCollection.cs
- PenLineJoinValidation.cs
- ContentPosition.cs
- DataServicePagingProviderWrapper.cs
- ConfigurationSectionHelper.cs
- RightsManagementInformation.cs
- ScriptBehaviorDescriptor.cs
- DynamicRendererThreadManager.cs
- CheckedPointers.cs
- CqlErrorHelper.cs
- DecimalKeyFrameCollection.cs
- Helper.cs
- TypedElement.cs
- CornerRadiusConverter.cs
- StrokeNode.cs
- CustomAttributeFormatException.cs
- FontInfo.cs
- AsymmetricSignatureDeformatter.cs
- HttpConfigurationSystem.cs
- BrowserCapabilitiesFactory.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- clipboard.cs
- TextEditorContextMenu.cs
- StandardOleMarshalObject.cs
- XpsResource.cs
- XmlSchemaAnnotated.cs
- SystemFonts.cs
- ButtonChrome.cs