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
- SecurityTokenAuthenticator.cs
- HotSpotCollection.cs
- ColorConvertedBitmapExtension.cs
- EditorPartChrome.cs
- UnsafeNativeMethods.cs
- List.cs
- DataProtection.cs
- HasCopySemanticsAttribute.cs
- RuleInfoComparer.cs
- RuntimeUtils.cs
- PreProcessInputEventArgs.cs
- CryptoProvider.cs
- RolePrincipal.cs
- ControlPaint.cs
- DispatcherObject.cs
- ProtocolsSection.cs
- ScriptingProfileServiceSection.cs
- ListViewInsertionMark.cs
- MediaTimeline.cs
- PointIndependentAnimationStorage.cs
- OdbcConnectionHandle.cs
- StorageInfo.cs
- MemberPath.cs
- TemplateBindingExpressionConverter.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- DrawingContext.cs
- ToolStripGrip.cs
- ConditionalAttribute.cs
- StrokeCollectionDefaultValueFactory.cs
- SafeProcessHandle.cs
- RemotingException.cs
- FrugalList.cs
- CommandLineParser.cs
- initElementDictionary.cs
- RoleManagerModule.cs
- VariableAction.cs
- EntryWrittenEventArgs.cs
- CodeExporter.cs
- Win32Native.cs
- WindowsAuthenticationModule.cs
- OperatingSystemVersionCheck.cs
- ListArgumentProvider.cs
- _CookieModule.cs
- DataBindingExpressionBuilder.cs
- FilteredDataSetHelper.cs
- StylusEventArgs.cs
- RuntimeIdentifierPropertyAttribute.cs
- Char.cs
- PeerCustomResolverElement.cs
- StorageTypeMapping.cs
- BStrWrapper.cs
- BamlReader.cs
- StyleXamlParser.cs
- PerformanceCounter.cs
- Rule.cs
- CustomAttribute.cs
- CommonDialog.cs
- XmlNamedNodeMap.cs
- DispatcherProcessingDisabled.cs
- SqlDependency.cs
- SSmlParser.cs
- OneToOneMappingSerializer.cs
- RectangleHotSpot.cs
- CryptoProvider.cs
- ItemType.cs
- ListBox.cs
- CustomAttribute.cs
- StyleTypedPropertyAttribute.cs
- VarInfo.cs
- TreeViewEvent.cs
- MetadataReference.cs
- TriState.cs
- VariableElement.cs
- DispatcherExceptionFilterEventArgs.cs
- DataGridCommandEventArgs.cs
- AppDomainProtocolHandler.cs
- XamlTypeWithExplicitNamespace.cs
- TextModifier.cs
- WorkflowWebService.cs
- Matrix.cs
- XmlObjectSerializerReadContextComplex.cs
- CallbackHandler.cs
- BamlResourceContent.cs
- safex509handles.cs
- SettingsPropertyNotFoundException.cs
- CompilerHelpers.cs
- SuppressMessageAttribute.cs
- DataGridViewSelectedCellCollection.cs
- VectorCollectionValueSerializer.cs
- TypeForwardedToAttribute.cs
- PageRequestManager.cs
- DoubleLinkList.cs
- printdlgexmarshaler.cs
- XPathCompileException.cs
- ReceiveActivity.cs
- ClosableStream.cs
- XmlAutoDetectWriter.cs
- ClosableStream.cs
- ConfigUtil.cs
- _SecureChannel.cs