Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ //// 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
- ScalarType.cs
- GregorianCalendarHelper.cs
- ServiceHttpModule.cs
- PauseStoryboard.cs
- TailPinnedEventArgs.cs
- HttpPostedFileWrapper.cs
- RegexMatchCollection.cs
- EventEntry.cs
- PasswordDeriveBytes.cs
- QueryParameter.cs
- cryptoapiTransform.cs
- Point3DCollection.cs
- ImpersonationContext.cs
- Cursor.cs
- XmlDataSourceNodeDescriptor.cs
- PageContentAsyncResult.cs
- EnvironmentPermission.cs
- LinqTreeNodeEvaluator.cs
- RichTextBoxConstants.cs
- XmlSchemaAttributeGroup.cs
- PermissionRequestEvidence.cs
- DataTablePropertyDescriptor.cs
- MetadataItem.cs
- BlockCollection.cs
- EllipseGeometry.cs
- ToolStripItemClickedEventArgs.cs
- Models.cs
- AndMessageFilter.cs
- TypeInitializationException.cs
- FixedSOMPageElement.cs
- Translator.cs
- EntityDataSourceWizardForm.cs
- DefaultPrintController.cs
- TextElement.cs
- AddIn.cs
- TemplateColumn.cs
- XmlNamedNodeMap.cs
- listitem.cs
- ConcurrentDictionary.cs
- DispatchChannelSink.cs
- EndpointNameMessageFilter.cs
- ArraySegment.cs
- AttributedMetaModel.cs
- RadialGradientBrush.cs
- StorageFunctionMapping.cs
- Crypto.cs
- ContentType.cs
- SecurityElement.cs
- _PooledStream.cs
- MsmqHostedTransportManager.cs
- HostDesigntimeLicenseContext.cs
- ToolBarButton.cs
- ExpandCollapseProviderWrapper.cs
- ObjectCache.cs
- Nullable.cs
- AccessedThroughPropertyAttribute.cs
- XmlSchemaGroup.cs
- DataGridViewCellLinkedList.cs
- HierarchicalDataBoundControlAdapter.cs
- ClientConvert.cs
- OutputCacheSettingsSection.cs
- Decoder.cs
- QilXmlWriter.cs
- RSAPKCS1SignatureFormatter.cs
- FixedTextView.cs
- MobileControlBuilder.cs
- DetailsViewActionList.cs
- WebPartManager.cs
- SemanticBasicElement.cs
- Geometry.cs
- CustomAttribute.cs
- SettingsPropertyValue.cs
- ClientTarget.cs
- Line.cs
- JsonGlobals.cs
- SecurityUniqueId.cs
- Blend.cs
- NamedObject.cs
- CapabilitiesSection.cs
- XPathNodeIterator.cs
- CodePageEncoding.cs
- BulletedListEventArgs.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- PenThread.cs
- CodeTypeConstructor.cs
- PackageFilter.cs
- RelationshipManager.cs
- BitmapDecoder.cs
- PathGeometry.cs
- WindowsListBox.cs
- IisTraceWebEventProvider.cs
- CodeIdentifiers.cs
- HttpModuleActionCollection.cs
- TypeConverter.cs
- WindowsToolbarItemAsMenuItem.cs
- LinqDataSourceInsertEventArgs.cs
- InvalidPropValue.cs
- CodeExpressionStatement.cs
- DataGridSortCommandEventArgs.cs
- MasterPageCodeDomTreeGenerator.cs