Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Messaging / System / Messaging / BinaryMessageFormatter.cs / 1305376 / BinaryMessageFormatter.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Messaging { using System; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary; using System.Diagnostics; using System.IO; using System.ComponentModel; ////// /// Formatter class that serializes and deserializes objects into /// and from MessageQueue messages using binary format. /// public class BinaryMessageFormatter : IMessageFormatter { private BinaryFormatter formatter; internal const short VT_BINARY_OBJECT = 0x300; ////// /// Creates a new Binary message formatter object. /// public BinaryMessageFormatter() { this.formatter = new BinaryFormatter(); } ////// /// Creates a new Binary message formatter object /// with the given properties. /// public BinaryMessageFormatter(FormatterAssemblyStyle topObjectFormat, FormatterTypeStyle typeFormat) { this.formatter = new BinaryFormatter(); this.formatter.AssemblyFormat = topObjectFormat; this.formatter.TypeFormat = typeFormat; } ////// /// Determines how the top (root) object of a graph /// is laid out in the serialized stream. /// [MessagingDescription(Res.MsgTopObjectFormat), DefaultValueAttribute(FormatterAssemblyStyle.Simple)] public FormatterAssemblyStyle TopObjectFormat { get { return this.formatter.AssemblyFormat; } set { this.formatter.AssemblyFormat = value; } } ////// /// Determines how type descriptions are laid out in the /// serialized stream. /// [MessagingDescription(Res.MsgTypeFormat), DefaultValueAttribute(FormatterTypeStyle.TypesWhenNeeded)] public FormatterTypeStyle TypeFormat { get { return this.formatter.TypeFormat; } set { this.formatter.TypeFormat = value; } } ////// /// public bool CanRead(Message message) { if (message == null) throw new ArgumentNullException("message"); int variantType = message.BodyType; if (variantType != VT_BINARY_OBJECT) return false; return true; } ///When this method is called, the formatter will attempt to determine /// if the contents of the message are something the formatter can deal with. ////// /// This method is needed to improve scalability on Receive and ReceiveAsync scenarios. Not requiring /// thread safety on read and write. /// public object Clone() { return new BinaryMessageFormatter(TopObjectFormat, TypeFormat); } ////// /// This method is used to read the contents from the given message /// and create an object. /// public object Read(Message message) { if (message == null) throw new ArgumentNullException("message"); int variantType = message.BodyType; if (variantType == VT_BINARY_OBJECT) { Stream stream = message.BodyStream; return formatter.Deserialize(stream); } throw new InvalidOperationException(Res.GetString(Res.InvalidTypeDeserialization)); } ////// /// This method is used to write the given object into the given message. /// If the formatter cannot understand the given object, an exception is thrown. /// public void Write(Message message, object obj) { if (message == null) throw new ArgumentNullException("message"); Stream stream = new MemoryStream(); formatter.Serialize(stream, obj); message.BodyType = VT_BINARY_OBJECT; message.BodyStream = stream; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RawStylusInputReport.cs
- PointLight.cs
- TakeQueryOptionExpression.cs
- PropertyEntry.cs
- TagMapInfo.cs
- hwndwrapper.cs
- SerializerWriterEventHandlers.cs
- ExpressionVisitor.cs
- TransformDescriptor.cs
- AuthenticationManager.cs
- TrackBar.cs
- FixedPageProcessor.cs
- SamlAdvice.cs
- RelationshipNavigation.cs
- SqlGenerator.cs
- _FtpDataStream.cs
- EncoderBestFitFallback.cs
- DbProviderFactories.cs
- SmtpLoginAuthenticationModule.cs
- PropertyInformationCollection.cs
- HasActivatableWorkflowEvent.cs
- Normalization.cs
- ProtocolsConfigurationEntry.cs
- WindowCollection.cs
- HttpResponseInternalBase.cs
- ByteStreamGeometryContext.cs
- FrameworkPropertyMetadata.cs
- PathFigure.cs
- DataViewSettingCollection.cs
- FontNamesConverter.cs
- FloaterParaClient.cs
- MILUtilities.cs
- CodeSnippetTypeMember.cs
- TraceListener.cs
- DrawListViewItemEventArgs.cs
- Preprocessor.cs
- DeliveryStrategy.cs
- ControlBuilder.cs
- LineProperties.cs
- EntityDataSourceViewSchema.cs
- MultipartIdentifier.cs
- Win32PrintDialog.cs
- LinearKeyFrames.cs
- XmlArrayItemAttributes.cs
- ThicknessConverter.cs
- externdll.cs
- SequenceRange.cs
- ArgumentException.cs
- TabControlEvent.cs
- WebColorConverter.cs
- Win32SafeHandles.cs
- StorageAssociationTypeMapping.cs
- ValidationError.cs
- ArcSegment.cs
- OverflowException.cs
- HtmlTableCellCollection.cs
- EventSinkHelperWriter.cs
- DbMetaDataCollectionNames.cs
- X509Certificate2.cs
- ExtensionFile.cs
- SafeFileMapViewHandle.cs
- OutKeywords.cs
- EditorZoneDesigner.cs
- ConfigurationLocationCollection.cs
- OledbConnectionStringbuilder.cs
- Button.cs
- BezierSegment.cs
- ControlBuilder.cs
- FixedStringLookup.cs
- ScriptManagerProxy.cs
- ConfigurationManager.cs
- InvalidProgramException.cs
- LoggedException.cs
- ConfigurationLocation.cs
- TextInfo.cs
- MobileControlBuilder.cs
- ElementUtil.cs
- XmlNodeChangedEventManager.cs
- GridItemCollection.cs
- RelationshipDetailsRow.cs
- Misc.cs
- TagNameToTypeMapper.cs
- RuleConditionDialog.cs
- StringUtil.cs
- CounterSet.cs
- UIElementPropertyUndoUnit.cs
- XmlName.cs
- UIElementParaClient.cs
- ApplicationGesture.cs
- SizeAnimationClockResource.cs
- CollectionView.cs
- SettingsBase.cs
- ToolboxItemImageConverter.cs
- StylusPointProperties.cs
- StringInfo.cs
- ImageConverter.cs
- CommandLibraryHelper.cs
- CacheMemory.cs
- ProfileSettingsCollection.cs
- ProfessionalColors.cs