Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / TransactionBridge / Microsoft / Transactions / Wsat / Messaging / Messages.cs / 1 / Messages.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // Implementation for all WS-Coor, WS-AT and .NET-AT messages using System; using System.ServiceModel.Channels; using System.Diagnostics; using System.IO; using System.ServiceModel; using System.Text; using System.Threading; using System.Transactions; using System.Xml; using Microsoft.Transactions.Wsat.Protocol; namespace Microsoft.Transactions.Wsat.Messaging { //--------------------------------------------------------------------------------------------------- // // Messages // //--------------------------------------------------------------------------------------------------- abstract class CoordinationMessage : Message { MessageHeaders headers; MessageProperties properties; protected CoordinationMessage(string action, MessageVersion version) { this.headers = new MessageHeaders(version); this.headers.Action = action; } public override MessageHeaders Headers { get { return this.headers; } } public override MessageProperties Properties { get { if (this.properties == null) { lock (this) { if (this.properties == null) { this.properties = new MessageProperties(); } } } return this.properties; } } public override MessageVersion Version { get { return this.headers.MessageVersion; } } } //---------------------------------------------------------------------------------------------------- // // Activation // //--------------------------------------------------------------------------------------------------- class CreateCoordinationContextMessage : CoordinationMessage { CreateCoordinationContext create; public CreateCoordinationContextMessage(MessageVersion version, ref CreateCoordinationContext create) : base(CoordinationStrings.Version(create.ProtocolVersion).CreateCoordinationContextAction, version) { this.create = create; } protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { if (writer == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException ("writer")); this.create.WriteTo(writer); } } class CreateCoordinationContextResponseMessage : CoordinationMessage { CreateCoordinationContextResponse response; public CreateCoordinationContextResponseMessage(MessageVersion version, ref CreateCoordinationContextResponse response) : base(CoordinationStrings.Version(response.ProtocolVersion).CreateCoordinationContextResponseAction, version) { this.response = response; } protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { if (writer == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException ("writer")); this.response.WriteTo(writer); } } //---------------------------------------------------------------------------------------------------- // // Registration // //---------------------------------------------------------------------------------------------------- class RegisterMessage : CoordinationMessage { Register register; public RegisterMessage(MessageVersion version, ref Register registerBody) : base(CoordinationStrings.Version(registerBody.ProtocolVersion).RegisterAction, version) { this.register = registerBody; } protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { if (writer == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException ("writer")); register.WriteTo(writer); } } class RegisterResponseMessage : CoordinationMessage { RegisterResponse response; public RegisterResponseMessage(MessageVersion version, ref RegisterResponse response) : base(CoordinationStrings.Version(response.ProtocolVersion).RegisterResponseAction, version) { this.response = response; } protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { if (writer == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException ("writer")); response.WriteTo(writer); } } //--------------------------------------------------------------------------------------------------- // // WS-AT messages // //---------------------------------------------------------------------------------------------------- abstract class NotificationMessage : CoordinationMessage { protected AtomicTransactionStrings atomicTransactionStrings; protected AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings; protected NotificationMessage(string action, MessageVersion version, ProtocolVersion protocolVersion) : base(action, version) { this.atomicTransactionStrings = AtomicTransactionStrings.Version(protocolVersion); this.atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); } protected void WriteTo(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString ns) { writer.WriteStartElement(prefix, localName, ns); writer.WriteEndElement(); } protected static void ReadFrom(Message message, XmlDictionaryString localName, XmlDictionaryString ns) { if (message.IsEmpty) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidMessageException(SR.GetString(SR.InvalidMessageBody))); } using (XmlDictionaryReader reader = message.GetReaderAtBodyContents()) { ReadFrom(reader, localName, ns); try { message.ReadFromBodyContentsToEnd(reader); } catch (XmlException e) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidMessageException(SR.GetString(SR.InvalidMessageBody), e)); } } } protected static void ReadFrom(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString ns) { try { if (!reader.IsStartElement (localName, ns)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidMessageException(SR.GetString(SR.InvalidMessageBody))); } bool empty = reader.IsEmptyElement; reader.ReadStartElement(); if (!empty) { // Play nicely with any elements that might be inside the notification element while (reader.IsStartElement()) { reader.Skip(); } reader.ReadEndElement(); } } catch (XmlException e) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidMessageException (SR.GetString (SR.InvalidMessageBody), e)); } } public static Message CreateRecoverMessage(MessageVersion version, ProtocolVersion protocolVersion) { ProtocolVersionHelper.AssertProtocolVersion(protocolVersion, typeof(NotificationMessage), "CreateRecoverMessage"); switch (protocolVersion) { case ProtocolVersion.Version10 : return new ReplayMessage(version, protocolVersion); case ProtocolVersion.Version11 : return new PreparedMessage(version, protocolVersion); default : return null; // inaccessible path because we have asserted the protocol version } } } //--------------------------------------------------------------------------------------------------- class PrepareMessage : NotificationMessage { public PrepareMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).PrepareAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.Prepare, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.Prepare, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.Prepare, atomicTransactionXmlDictionaryStrings.Namespace); } } //--------------------------------------------------------------------------------------------------- class PreparedMessage : NotificationMessage { public PreparedMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).PreparedAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.Prepared, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.Prepared, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.Prepared, atomicTransactionXmlDictionaryStrings.Namespace); } } //--------------------------------------------------------------------------------------------------- class ReadOnlyMessage : NotificationMessage { public ReadOnlyMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).ReadOnlyAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.ReadOnly, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.ReadOnly, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.ReadOnly, atomicTransactionXmlDictionaryStrings.Namespace); } } //---------------------------------------------------------------------------------------------------- class CommitMessage : NotificationMessage { public CommitMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).CommitAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.Commit, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.Commit, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.Commit, atomicTransactionXmlDictionaryStrings.Namespace); } } //--------------------------------------------------------------------------------------------------- class RollbackMessage : NotificationMessage { public RollbackMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).RollbackAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.Rollback, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.Rollback, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.Rollback, atomicTransactionXmlDictionaryStrings.Namespace); } } //---------------------------------------------------------------------------------------------------- class CommittedMessage : NotificationMessage { public CommittedMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).CommittedAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.Committed, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.Committed, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.Committed, atomicTransactionXmlDictionaryStrings.Namespace); } } //---------------------------------------------------------------------------------------------------- class AbortedMessage : NotificationMessage { public AbortedMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).AbortedAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.Aborted, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.Aborted, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.Aborted, atomicTransactionXmlDictionaryStrings.Namespace); } } //--------------------------------------------------------------------------------------------------- class ReplayMessage : NotificationMessage { public ReplayMessage(MessageVersion version, ProtocolVersion protocolVersion) : base(AtomicTransactionStrings.Version(protocolVersion).ReplayAction, version, protocolVersion) {} protected override void OnWriteBodyContents (XmlDictionaryWriter writer) { WriteTo(writer, this.atomicTransactionStrings.Prefix, this.atomicTransactionXmlDictionaryStrings.Replay, this.atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(Message message, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(message, atomicTransactionXmlDictionaryStrings.Replay, atomicTransactionXmlDictionaryStrings.Namespace); } public static void ReadFrom(XmlDictionaryReader reader, ProtocolVersion protocolVersion) { AtomicTransactionXmlDictionaryStrings atomicTransactionXmlDictionaryStrings = AtomicTransactionXmlDictionaryStrings.Version(protocolVersion); ReadFrom(reader, atomicTransactionXmlDictionaryStrings.Replay, atomicTransactionXmlDictionaryStrings.Namespace); } } } // 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
- ModifierKeysValueSerializer.cs
- WindowsSecurityToken.cs
- VisualCollection.cs
- WasAdminWrapper.cs
- EventRecordWrittenEventArgs.cs
- AstNode.cs
- TransformerInfoCollection.cs
- SafeNativeMethodsOther.cs
- ZipIOExtraField.cs
- Environment.cs
- PageHandlerFactory.cs
- unitconverter.cs
- GridItemProviderWrapper.cs
- SurrogateEncoder.cs
- DataSvcMapFileSerializer.cs
- DbConnectionOptions.cs
- FrameAutomationPeer.cs
- ToolboxItemLoader.cs
- DayRenderEvent.cs
- ClosableStream.cs
- VectorKeyFrameCollection.cs
- GuidTagList.cs
- CodeNamespaceImport.cs
- NumberFunctions.cs
- ExtensionSimplifierMarkupObject.cs
- ZoneMembershipCondition.cs
- CodeAttributeDeclaration.cs
- CurrencyWrapper.cs
- PeerChannelListener.cs
- SiteMapHierarchicalDataSourceView.cs
- TextEndOfLine.cs
- HttpContext.cs
- TokenCreationException.cs
- GeneralTransform3DCollection.cs
- DesignerSerializerAttribute.cs
- ImageCodecInfoPrivate.cs
- MarshalByValueComponent.cs
- COM2ComponentEditor.cs
- AdapterDictionary.cs
- Point3D.cs
- XPathParser.cs
- IndicFontClient.cs
- SignerInfo.cs
- ConfigsHelper.cs
- ParallelDesigner.cs
- EntityDataSourceQueryBuilder.cs
- OpacityConverter.cs
- MetadataCache.cs
- PictureBox.cs
- HttpListenerException.cs
- SignatureToken.cs
- AmbientLight.cs
- MailAddressParser.cs
- VisualProxy.cs
- TriggerCollection.cs
- QueryAsyncResult.cs
- BitConverter.cs
- RelationshipNavigation.cs
- XpsS0ValidatingLoader.cs
- SoapFault.cs
- GeometryDrawing.cs
- TextTreeNode.cs
- BamlResourceContent.cs
- EditorZone.cs
- ResourceReader.cs
- CompleteWizardStep.cs
- ProcessInfo.cs
- SystemWebCachingSectionGroup.cs
- ProcessModelInfo.cs
- DesignTimeParseData.cs
- ConnectionConsumerAttribute.cs
- UTF7Encoding.cs
- ScriptReferenceBase.cs
- InArgument.cs
- RoleManagerEventArgs.cs
- XmlWellformedWriter.cs
- ClientSettings.cs
- ConnectionProviderAttribute.cs
- IsolatedStorageFilePermission.cs
- SoapIgnoreAttribute.cs
- UnescapedXmlDiagnosticData.cs
- ChangeProcessor.cs
- AnnouncementEventArgs.cs
- BufferedResponseStream.cs
- HttpCacheVary.cs
- FixedTextBuilder.cs
- SvcMapFileSerializer.cs
- ObjectViewFactory.cs
- Bind.cs
- WMIInterop.cs
- HtmlTableCell.cs
- XmlAttribute.cs
- AbandonedMutexException.cs
- ConfigurationManager.cs
- Encoding.cs
- SafeProcessHandle.cs
- FontSizeConverter.cs
- AuthorizationRule.cs
- DynamicDiscoveryDocument.cs
- CorrelationScope.cs