Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / Util / Transactions.cs / 1 / 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
//
///
/// [To be supplied.]
///
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.]
///
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
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; }
}
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridDefaultColumnWidthTypeConverter.cs
- XmlObjectSerializerReadContext.cs
- TemplateColumn.cs
- UIHelper.cs
- LogManagementAsyncResult.cs
- ArraySubsetEnumerator.cs
- EventLog.cs
- DataViewManagerListItemTypeDescriptor.cs
- PageClientProxyGenerator.cs
- ProgressBar.cs
- FactoryMaker.cs
- RepeaterDataBoundAdapter.cs
- Hyperlink.cs
- SecureUICommand.cs
- HwndKeyboardInputProvider.cs
- indexingfiltermarshaler.cs
- CustomErrorCollection.cs
- ProfileManager.cs
- WebBrowser.cs
- _BufferOffsetSize.cs
- ResXResourceReader.cs
- TableRowGroup.cs
- SqlConnectionString.cs
- SchemaInfo.cs
- GridItemCollection.cs
- PowerStatus.cs
- JpegBitmapDecoder.cs
- SqlCharStream.cs
- MenuEventArgs.cs
- sqlinternaltransaction.cs
- XmlTextAttribute.cs
- Environment.cs
- ProgressBar.cs
- AutoCompleteStringCollection.cs
- CachedTypeface.cs
- RegexBoyerMoore.cs
- DataTableExtensions.cs
- COM2ComponentEditor.cs
- ObservableDictionary.cs
- FlowDocumentPaginator.cs
- BamlResourceContent.cs
- InternalTypeHelper.cs
- QueryPageSettingsEventArgs.cs
- PrimitiveXmlSerializers.cs
- TcpTransportBindingElement.cs
- TextTreeFixupNode.cs
- Validator.cs
- SecurityPermission.cs
- NamespaceInfo.cs
- DispatcherSynchronizationContext.cs
- GeometryHitTestParameters.cs
- HotCommands.cs
- ProxyManager.cs
- NamedPipeConnectionPoolSettings.cs
- ToolstripProfessionalRenderer.cs
- PanelStyle.cs
- UnsafeNativeMethods.cs
- PeerCredentialElement.cs
- UInt16.cs
- CodeSnippetTypeMember.cs
- ModelTreeManager.cs
- CustomTrackingQuery.cs
- ExternalException.cs
- SerializerProvider.cs
- MimeFormatter.cs
- ListViewHitTestInfo.cs
- CompositeFontFamily.cs
- IHttpResponseInternal.cs
- PresentationAppDomainManager.cs
- DrawingContextWalker.cs
- Int64KeyFrameCollection.cs
- ModelService.cs
- HighContrastHelper.cs
- FileChangesMonitor.cs
- Application.cs
- CodeStatement.cs
- DataGridViewDataErrorEventArgs.cs
- RelativeSource.cs
- cookie.cs
- Win32SafeHandles.cs
- DeferredReference.cs
- NetworkInformationPermission.cs
- ProviderBase.cs
- DataGridCellClipboardEventArgs.cs
- XmlILStorageConverter.cs
- ObjectFullSpanRewriter.cs
- EntityDataSourceChangingEventArgs.cs
- SQLDateTime.cs
- HybridDictionary.cs
- SubMenuStyleCollectionEditor.cs
- BinaryUtilClasses.cs
- HashRepartitionStream.cs
- CookielessHelper.cs
- GeometryDrawing.cs
- TagPrefixAttribute.cs
- ImageMap.cs
- SqlClientMetaDataCollectionNames.cs
- BooleanFacetDescriptionElement.cs
- CapabilitiesUse.cs
- XmlObjectSerializerReadContextComplexJson.cs