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
- CommandID.cs
- BaseInfoTable.cs
- ClientUtils.cs
- ArrangedElement.cs
- RadialGradientBrush.cs
- KnownTypesHelper.cs
- RevocationPoint.cs
- DebuggerAttributes.cs
- StringTraceRecord.cs
- SrgsGrammarCompiler.cs
- EntityDataSourceQueryBuilder.cs
- Emitter.cs
- NullableBoolConverter.cs
- XmlnsCompatibleWithAttribute.cs
- CompilerLocalReference.cs
- ProxyManager.cs
- DbProviderSpecificTypePropertyAttribute.cs
- HtmlInputImage.cs
- CSharpCodeProvider.cs
- SHA256CryptoServiceProvider.cs
- MenuAutomationPeer.cs
- OrCondition.cs
- ObjectQuery_EntitySqlExtensions.cs
- GeneralTransform3DGroup.cs
- WSSecurityJan2004.cs
- CookieHandler.cs
- EntityContainer.cs
- FreezableDefaultValueFactory.cs
- SapiRecognizer.cs
- TreeViewDataItemAutomationPeer.cs
- XmlSortKey.cs
- CorrelationRequestContext.cs
- DbgUtil.cs
- ProfilePropertyNameValidator.cs
- DesignBindingEditor.cs
- PermissionListSet.cs
- ToolStripDropDownClosedEventArgs.cs
- EdmValidator.cs
- EncryptedType.cs
- PointHitTestParameters.cs
- AccessDataSourceWizardForm.cs
- RC2CryptoServiceProvider.cs
- ListBoxDesigner.cs
- DrawingCollection.cs
- WsatStrings.cs
- panel.cs
- CanExecuteRoutedEventArgs.cs
- GlyphShapingProperties.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- XmlText.cs
- TextParentUndoUnit.cs
- PathNode.cs
- SqlNotificationEventArgs.cs
- DataGridViewCellFormattingEventArgs.cs
- ControlType.cs
- QueryStringParameter.cs
- DbCommandDefinition.cs
- PropertyManager.cs
- RectangleConverter.cs
- EntityDataSourceWrapperCollection.cs
- EntityModelSchemaGenerator.cs
- Camera.cs
- HandleCollector.cs
- BuildProviderInstallComponent.cs
- XmlBindingWorker.cs
- ExpandableObjectConverter.cs
- UpdateProgress.cs
- NumericUpDown.cs
- MobileResource.cs
- OracleRowUpdatingEventArgs.cs
- RuleRef.cs
- Errors.cs
- HelpEvent.cs
- MatrixCamera.cs
- CallId.cs
- StructuredTypeInfo.cs
- DataComponentNameHandler.cs
- Lasso.cs
- InvalidCommandTreeException.cs
- DrawingVisualDrawingContext.cs
- WebBrowserContainer.cs
- GridViewCancelEditEventArgs.cs
- ClassValidator.cs
- Parser.cs
- Exceptions.cs
- DragEvent.cs
- Msec.cs
- TraceUtility.cs
- DockPanel.cs
- ExtendedTransformFactory.cs
- Calendar.cs
- Atom10ItemFormatter.cs
- TreeNodeSelectionProcessor.cs
- Tuple.cs
- VirtualizedItemPattern.cs
- HttpListenerException.cs
- UpDownBaseDesigner.cs
- ConditionalAttribute.cs
- PageHandlerFactory.cs
- OracleConnectionStringBuilder.cs