Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / TransactionBridge / Microsoft / Transactions / Wsat / Recovery / LogEntrySerialization.cs / 1 / LogEntrySerialization.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // This file contains the main entry points for the rest of log entry serialization // and deserialization using System; using System.Diagnostics; using System.IO; using System.ServiceModel; using Microsoft.Transactions.Bridge; using Microsoft.Transactions.Wsat.Messaging; using Microsoft.Transactions.Wsat.Protocol; using DiagnosticUtility = Microsoft.Transactions.Bridge.DiagnosticUtility; namespace Microsoft.Transactions.Wsat.Recovery { class LogEntrySerialization { ProtocolState state; ProtocolVersion protocolVersion; int maxLogEntrySize; public LogEntrySerialization(ProtocolState state) { if(state == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException ("state")); this.state = state; this.protocolVersion = state.ProtocolVersion; this.maxLogEntrySize = this.state.TransactionManager.MaxLogEntrySize; } public LogEntrySerialization(int maxLogEntrySize, ProtocolVersion protocolVersion) { this.protocolVersion = protocolVersion; this.maxLogEntrySize = maxLogEntrySize; } public byte[] Serialize(CoordinatorEnlistment coordinator) { Enlistment enlistment = coordinator.Enlistment; LogEntry logEntry = new LogEntry(enlistment.RemoteTransactionId, enlistment.LocalTransactionId, coordinator.EnlistmentId, coordinator.CoordinatorProxy.To); return SerializeLogEntry(logEntry); } public byte[] Serialize(ParticipantEnlistment participant) { Enlistment enlistment = participant.Enlistment; LogEntry logEntry = new LogEntry(enlistment.RemoteTransactionId, enlistment.LocalTransactionId, participant.EnlistmentId, participant.ParticipantProxy.To); return SerializeLogEntry(logEntry); } public ParticipantEnlistment DeserializeParticipant(Enlistment enlistment) { byte[] buffer = enlistment.GetRecoveryData(); LogEntry logEntry = DeserializeLogEntry(buffer, enlistment.LocalTransactionId); enlistment.RemoteTransactionId = logEntry.RemoteTransactionId; return new ParticipantEnlistment(state, enlistment, logEntry.LocalEnlistmentId, logEntry.Endpoint); } public CoordinatorEnlistment DeserializeCoordinator(Enlistment enlistment) { byte[] buffer = enlistment.GetRecoveryData(); LogEntry logEntry = DeserializeLogEntry(buffer, enlistment.LocalTransactionId); enlistment.RemoteTransactionId = logEntry.RemoteTransactionId; return new CoordinatorEnlistment(state, enlistment, logEntry.LocalEnlistmentId, logEntry.Endpoint); } // // Implementation // byte[] SerializeLogEntry(LogEntry logEntry) { LogEntrySerializer serializer = new WsATv1LogEntrySerializer(logEntry, this.protocolVersion); byte[] buffer = serializer.Serialize(); if (DebugTrace.Verbose) { DebugTrace.Trace(TraceLevel.Verbose, "Serialized {0} byte buffer", buffer.Length); } if (buffer.Length > this.maxLogEntrySize) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.SerializationLogEntryTooBig, buffer.Length))); } return buffer; } LogEntry DeserializeLogEntry(byte[] buffer, Guid localTransactionId) { if (DebugTrace.Verbose) { DebugTrace.Trace(TraceLevel.Verbose, "Deserializing {0} byte buffer", buffer.Length); } // Deserialize the header MemoryStream mem = new MemoryStream(buffer, 0, buffer.Length, false, true); LogEntry logEntry = DeserializeHeader(mem, localTransactionId); // Find a deserializer for the extended endpoint information LogEntryDeserializer deserializer = CreateDeserializer(mem, logEntry); return deserializer.Deserialize(); } LogEntry DeserializeHeader(MemoryStream mem, Guid localTransactionId) { // Find the right header deserializer LogEntryHeaderDeserializer headerDeserializer; LogEntryHeaderVersion headerVersion = (LogEntryHeaderVersion) SerializationUtils.ReadByte(mem); switch (headerVersion) { case LogEntryHeaderVersion.v1: headerDeserializer = new LogEntryHeaderv1Deserializer(mem, localTransactionId); break; default: // An invalid Enum value on this internal code path indicates // a product bug and violates assumptions about // valid values in MSDTC. DiagnosticUtility.FailFast("Log entry with unsupported major version"); headerDeserializer = null; // Keep the compiler happy break; } // Deserialize the header return headerDeserializer.DeserializeHeader(); } LogEntryDeserializer CreateDeserializer(MemoryStream mem, LogEntry logEntry) { return new WsATv1LogEntryDeserializer(mem, logEntry, this.protocolVersion); } } } // 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
- HtmlHead.cs
- MethodBuilderInstantiation.cs
- Vertex.cs
- CommonObjectSecurity.cs
- BinaryCommonClasses.cs
- UpdateException.cs
- ISAPIWorkerRequest.cs
- ComponentResourceKeyConverter.cs
- ValuePattern.cs
- XhtmlBasicListAdapter.cs
- ListItemCollection.cs
- ParameterBuilder.cs
- Pointer.cs
- ProxyManager.cs
- WindowsFormsHost.cs
- ServiceMetadataExtension.cs
- SafeHandle.cs
- CustomSignedXml.cs
- WebPartDeleteVerb.cs
- MetadataCollection.cs
- UnionCodeGroup.cs
- SignedXml.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- SystemPens.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- ClientSideProviderDescription.cs
- RawStylusInputCustomData.cs
- Html32TextWriter.cs
- ContentHostHelper.cs
- XPathParser.cs
- CodeStatementCollection.cs
- XmlSchemaSimpleContentRestriction.cs
- TypeHelpers.cs
- SafeThreadHandle.cs
- SqlAggregateChecker.cs
- DataFormat.cs
- EnumConverter.cs
- ListViewTableCell.cs
- PropVariant.cs
- ByteArrayHelperWithString.cs
- Property.cs
- NativeMethods.cs
- ParameterBuilder.cs
- WsatTransactionHeader.cs
- TraceInternal.cs
- FastPropertyAccessor.cs
- HttpCachePolicy.cs
- ViewGenerator.cs
- MenuAutoFormat.cs
- ReadOnlyDictionary.cs
- RegexMatchCollection.cs
- MenuCommands.cs
- ListViewItem.cs
- RangeBase.cs
- SecurityPolicySection.cs
- MaskDescriptor.cs
- XmlSchemaImporter.cs
- input.cs
- PackageRelationshipCollection.cs
- PartitionResolver.cs
- TypefaceMap.cs
- AnimationClock.cs
- Relationship.cs
- MessageQueuePermission.cs
- WebPartManager.cs
- MonikerProxyAttribute.cs
- ObjectParameter.cs
- SchemaNames.cs
- AutoResetEvent.cs
- ModelFunction.cs
- XsltQilFactory.cs
- SevenBitStream.cs
- GrammarBuilderBase.cs
- WebPartConnectionsDisconnectVerb.cs
- StandardTransformFactory.cs
- AliasGenerator.cs
- ExpandSegment.cs
- CodeArgumentReferenceExpression.cs
- unitconverter.cs
- LogExtentCollection.cs
- Evidence.cs
- _FtpDataStream.cs
- Ppl.cs
- InternalsVisibleToAttribute.cs
- TimeoutStream.cs
- WebPartMenu.cs
- StateChangeEvent.cs
- PageAdapter.cs
- CommentEmitter.cs
- ExpressionBindingCollection.cs
- OuterGlowBitmapEffect.cs
- TypedElement.cs
- InvalidDataException.cs
- HttpAsyncResult.cs
- HtmlInputCheckBox.cs
- WindowsEditBox.cs
- SqlSupersetValidator.cs
- SecurityContext.cs
- TableCellCollection.cs
- ReflectionTypeLoadException.cs