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
- XmlSchemaType.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- ActiveXMessageFormatter.cs
- WeakReferenceList.cs
- HostVisual.cs
- SQLInt64.cs
- RepeaterItem.cs
- AuthenticationSection.cs
- TimeSpanOrInfiniteValidator.cs
- RTTrackingProfile.cs
- ADMembershipUser.cs
- SqlDataRecord.cs
- ConversionValidationRule.cs
- SoapTypeAttribute.cs
- Internal.cs
- ConfigurationManager.cs
- NumberEdit.cs
- StringTraceRecord.cs
- Int64AnimationBase.cs
- OutputCacheSettings.cs
- ProviderIncompatibleException.cs
- DodSequenceMerge.cs
- MruCache.cs
- Point3DValueSerializer.cs
- TemplateXamlParser.cs
- NavigationProperty.cs
- AdRotatorDesigner.cs
- Vector3DValueSerializer.cs
- PathBox.cs
- RowToFieldTransformer.cs
- List.cs
- Context.cs
- CdpEqualityComparer.cs
- SecUtil.cs
- ExceptionHelpers.cs
- AssociationTypeEmitter.cs
- XmlArrayAttribute.cs
- Mapping.cs
- GridViewColumn.cs
- util.cs
- XPathNavigatorKeyComparer.cs
- Pointer.cs
- SqlDataReaderSmi.cs
- QilStrConcat.cs
- SignatureHelper.cs
- RowUpdatingEventArgs.cs
- SecurityContextSecurityToken.cs
- SiblingIterators.cs
- SQLDateTime.cs
- TypedDataSetSchemaImporterExtension.cs
- IRCollection.cs
- SqlDataReader.cs
- UrlEncodedParameterWriter.cs
- TransactedBatchingBehavior.cs
- DataSourceProvider.cs
- BindingContext.cs
- DummyDataSource.cs
- metadatamappinghashervisitor.cs
- PropertyItemInternal.cs
- Win32SafeHandles.cs
- AncestorChangedEventArgs.cs
- SystemKeyConverter.cs
- WebPartVerbCollection.cs
- RawTextInputReport.cs
- PageThemeBuildProvider.cs
- NotCondition.cs
- SpecialNameAttribute.cs
- ResourcesChangeInfo.cs
- SrgsItemList.cs
- _SingleItemRequestCache.cs
- RelatedEnd.cs
- ControllableStoryboardAction.cs
- AsymmetricAlgorithm.cs
- NameTable.cs
- VerifyHashRequest.cs
- EmissiveMaterial.cs
- CompositeActivityValidator.cs
- TextServicesManager.cs
- Subtree.cs
- FilterableData.cs
- XmlElementAttribute.cs
- validationstate.cs
- HeaderUtility.cs
- UnsafeNativeMethodsCLR.cs
- DeploymentSection.cs
- _ListenerResponseStream.cs
- Image.cs
- ContentHostHelper.cs
- HostedTcpTransportManager.cs
- SqlGenerator.cs
- SerializationObjectManager.cs
- ValueProviderWrapper.cs
- DecimalAnimation.cs
- MatchingStyle.cs
- TextTreeText.cs
- WebControlParameterProxy.cs
- StringReader.cs
- DataGridViewComboBoxCell.cs
- LockedAssemblyCache.cs
- ConfigXmlDocument.cs