Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / TransactionFlowProperty.cs / 1 / TransactionFlowProperty.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System; using System.Collections.Generic; using System.ServiceModel; using System.ServiceModel.Security; using System.Transactions; using System.Runtime.Remoting.Messaging; using System.ServiceModel.Transactions; using System.ServiceModel.Diagnostics; sealed public class TransactionMessageProperty { TransactionInfo flowedTransactionInfo; Transaction flowedTransaction; const string PropertyName = "TransactionMessageProperty"; private TransactionMessageProperty() { } public Transaction Transaction { get { if(this.flowedTransaction == null && this.flowedTransactionInfo != null) { try { this.flowedTransaction = this.flowedTransactionInfo.UnmarshalTransaction(); } catch(TransactionException e) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(e); } } return this.flowedTransaction; } } static internal TransactionMessageProperty TryGet(Message message) { if (message.Properties.ContainsKey(PropertyName)) return message.Properties[PropertyName] as TransactionMessageProperty; else return null; } static internal Transaction TryGetTransaction(Message message) { if (!message.Properties.ContainsKey(PropertyName)) return null; return ((TransactionMessageProperty)message.Properties[PropertyName]).Transaction; } static TransactionMessageProperty GetPropertyAndThrowIfAlreadySet(Message message) { if (message.Properties.ContainsKey(PropertyName)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new FaultException(SR.GetString(SR.SFxTryAddMultipleTransactionsOnMessage))); } return new TransactionMessageProperty(); } static public void Set(Transaction transaction, Message message) { TransactionMessageProperty property = GetPropertyAndThrowIfAlreadySet(message); property.flowedTransaction = transaction; message.Properties.Add(PropertyName, property); } static internal void Set(TransactionInfo transactionInfo, Message message) { TransactionMessageProperty property = GetPropertyAndThrowIfAlreadySet(message); property.flowedTransactionInfo = transactionInfo; message.Properties.Add(PropertyName, property); } } class TransactionFlowProperty { Transaction flowedTransaction; ListissuedTokens; const string PropertyName = "TransactionFlowProperty"; private TransactionFlowProperty() { } internal ICollection IssuedTokens { get { if (this.issuedTokens == null) { this.issuedTokens = new List (); } return this.issuedTokens; } } internal Transaction Transaction { get {return this.flowedTransaction;} } static internal TransactionFlowProperty Ensure(Message message) { if (message.Properties.ContainsKey(PropertyName)) return (TransactionFlowProperty)message.Properties[PropertyName]; TransactionFlowProperty property = new TransactionFlowProperty(); message.Properties.Add(PropertyName, property); return property; } static internal TransactionFlowProperty TryGet(Message message) { if (message.Properties.ContainsKey(PropertyName)) return message.Properties[PropertyName] as TransactionFlowProperty; else return null; } static internal ICollection TryGetIssuedTokens(Message message) { TransactionFlowProperty property = TransactionFlowProperty.TryGet(message); if (property == null) return null; // use this when reading only, consistently return null if no tokens. if (property.issuedTokens == null || property.issuedTokens.Count == 0) return null; return property.issuedTokens; } static internal Transaction TryGetTransaction(Message message) { if (!message.Properties.ContainsKey(PropertyName)) return null; return ((TransactionFlowProperty)message.Properties[PropertyName]).Transaction; } static TransactionFlowProperty GetPropertyAndThrowIfAlreadySet(Message message) { TransactionFlowProperty property = TryGet(message); if (property != null) { if(property.flowedTransaction != null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new FaultException(SR.GetString(SR.SFxTryAddMultipleTransactionsOnMessage))); } } else { property = new TransactionFlowProperty(); } return property; } static internal void Set(Transaction transaction, Message message) { TransactionFlowProperty property = GetPropertyAndThrowIfAlreadySet(message); property.flowedTransaction = transaction; message.Properties.Add(PropertyName, property); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AnnotationResourceCollection.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- Listbox.cs
- Mappings.cs
- Trace.cs
- GenericsInstances.cs
- SerialPinChanges.cs
- ConversionHelper.cs
- ScalarConstant.cs
- AssemblyEvidenceFactory.cs
- QueryInterceptorAttribute.cs
- TemplateBuilder.cs
- ActivityLocationReferenceEnvironment.cs
- TabPage.cs
- IisTraceWebEventProvider.cs
- Label.cs
- SynchronizedInputAdaptor.cs
- ExtentKey.cs
- TableCellCollection.cs
- XmlSchemaRedefine.cs
- RewritingSimplifier.cs
- RC2CryptoServiceProvider.cs
- RelationshipSet.cs
- TableLayoutCellPaintEventArgs.cs
- ThemeableAttribute.cs
- ZipIOCentralDirectoryFileHeader.cs
- EdmProperty.cs
- ManagedIStream.cs
- InheritanceContextHelper.cs
- AdRotatorDesigner.cs
- RSAPKCS1SignatureFormatter.cs
- SoapMessage.cs
- StackBuilderSink.cs
- NamedObject.cs
- XmlEnumAttribute.cs
- MouseCaptureWithinProperty.cs
- CodeAccessPermission.cs
- PartialCachingControl.cs
- AuthenticationException.cs
- DocumentGridContextMenu.cs
- ScriptResourceAttribute.cs
- SystemColors.cs
- Freezable.cs
- XsltLibrary.cs
- CustomErrorsSectionWrapper.cs
- WebCategoryAttribute.cs
- ImportCatalogPart.cs
- MasterPageCodeDomTreeGenerator.cs
- BinaryConverter.cs
- TemplateInstanceAttribute.cs
- VerticalAlignConverter.cs
- WebPartMovingEventArgs.cs
- PageParserFilter.cs
- SystemIcmpV4Statistics.cs
- ImageCollectionCodeDomSerializer.cs
- UncommonField.cs
- FontStyle.cs
- XmlEntity.cs
- mediapermission.cs
- CharKeyFrameCollection.cs
- Pair.cs
- ScalarConstant.cs
- CodeAttributeDeclarationCollection.cs
- VisualStyleElement.cs
- SharedDp.cs
- Literal.cs
- Pick.cs
- Html32TextWriter.cs
- Config.cs
- ConfigurationElementProperty.cs
- DocumentViewerAutomationPeer.cs
- MimeParameters.cs
- CasesDictionary.cs
- OpCopier.cs
- DataBinding.cs
- TraversalRequest.cs
- SafeLibraryHandle.cs
- EventRoute.cs
- DragSelectionMessageFilter.cs
- DrawingDrawingContext.cs
- RuntimeIdentifierPropertyAttribute.cs
- DefaultPropertyAttribute.cs
- RequestQueryProcessor.cs
- StorageMappingFragment.cs
- LOSFormatter.cs
- Zone.cs
- BuildProviderAppliesToAttribute.cs
- CompositeTypefaceMetrics.cs
- ToolBarTray.cs
- PagePropertiesChangingEventArgs.cs
- EntityDataSourceChangedEventArgs.cs
- HtmlInputCheckBox.cs
- EntryIndex.cs
- WeakEventTable.cs
- HashRepartitionStream.cs
- DispatchWrapper.cs
- RelatedCurrencyManager.cs
- FileDialog.cs
- WebUtility.cs
- WindowsListViewGroupSubsetLink.cs