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
- Root.cs
- NGCPageContentCollectionSerializerAsync.cs
- XPathNavigatorKeyComparer.cs
- MyContact.cs
- SpotLight.cs
- TimeSpanConverter.cs
- ReadOnlyHierarchicalDataSourceView.cs
- UpDownBase.cs
- CollectionConverter.cs
- EdmFunctionAttribute.cs
- XmlMemberMapping.cs
- XPathParser.cs
- StyleTypedPropertyAttribute.cs
- ExpandSegmentCollection.cs
- PackagingUtilities.cs
- TCPListener.cs
- ExpressionPrefixAttribute.cs
- OperationInfo.cs
- ReadOnlyCollection.cs
- _FtpDataStream.cs
- ThreadStateException.cs
- FormatException.cs
- ColumnMapCopier.cs
- IEnumerable.cs
- WsatEtwTraceListener.cs
- PagesChangedEventArgs.cs
- DynamicDocumentPaginator.cs
- XslCompiledTransform.cs
- SqlConnectionManager.cs
- LineVisual.cs
- RawStylusInputCustomData.cs
- NamespaceList.cs
- GroupItem.cs
- FilteredReadOnlyMetadataCollection.cs
- HostSecurityManager.cs
- ComEventsSink.cs
- MailMessage.cs
- cookiecollection.cs
- BindingGroup.cs
- ObjectReaderCompiler.cs
- XPathExpr.cs
- BaseCollection.cs
- NativeMethods.cs
- AlignmentYValidation.cs
- ProcessProtocolHandler.cs
- CookielessData.cs
- DelegateCompletionCallbackWrapper.cs
- ColorAnimationBase.cs
- KeyValueInternalCollection.cs
- ReachVisualSerializer.cs
- XsdCachingReader.cs
- XsdCachingReader.cs
- WebBrowsableAttribute.cs
- FixedSOMSemanticBox.cs
- XmlDesignerDataSourceView.cs
- TextTreeUndo.cs
- wmiprovider.cs
- TextChangedEventArgs.cs
- HWStack.cs
- PageOrientation.cs
- WebPartEditVerb.cs
- XmlAggregates.cs
- Unit.cs
- PropertyChange.cs
- CryptoKeySecurity.cs
- HttpListenerPrefixCollection.cs
- PtsHelper.cs
- TraceRecord.cs
- LinkClickEvent.cs
- XmlSchemaType.cs
- prompt.cs
- SystemUdpStatistics.cs
- MsmqTransportReceiveParameters.cs
- HostedNamedPipeTransportManager.cs
- MutexSecurity.cs
- ListItemCollection.cs
- DuplexChannelBinder.cs
- CodeSubDirectoriesCollection.cs
- SqlFacetAttribute.cs
- PenLineJoinValidation.cs
- DBSqlParser.cs
- TemplateColumn.cs
- DataGridTableCollection.cs
- XPathNavigatorKeyComparer.cs
- MatrixAnimationUsingKeyFrames.cs
- MarkupExtensionParser.cs
- FormView.cs
- ToolboxComponentsCreatingEventArgs.cs
- XPathNodeIterator.cs
- WebReferenceOptions.cs
- CustomWebEventKey.cs
- WebException.cs
- DefaultTraceListener.cs
- StrongNamePublicKeyBlob.cs
- ProfileServiceManager.cs
- DataGridViewHitTestInfo.cs
- diagnosticsswitches.cs
- IisTraceListener.cs
- HttpAsyncResult.cs
- SchemaImporterExtensionsSection.cs