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
- WeakReferenceEnumerator.cs
- ListBindingHelper.cs
- dbenumerator.cs
- BitmapEffectInputConnector.cs
- CorePropertiesFilter.cs
- PageContentAsyncResult.cs
- ExtensibleClassFactory.cs
- NonParentingControl.cs
- InstanceCreationEditor.cs
- Stack.cs
- SQLMembershipProvider.cs
- TracedNativeMethods.cs
- FileNotFoundException.cs
- SkipQueryOptionExpression.cs
- ClientRolePrincipal.cs
- Matrix3DValueSerializer.cs
- CompilerWrapper.cs
- LogSwitch.cs
- ColorDialog.cs
- HttpValueCollection.cs
- Point3D.cs
- ListItemConverter.cs
- ExpressionBindingCollection.cs
- ListViewItemSelectionChangedEvent.cs
- DbReferenceCollection.cs
- SequenceNumber.cs
- DynamicILGenerator.cs
- EffectiveValueEntry.cs
- TimeSpanOrInfiniteConverter.cs
- WriterOutput.cs
- ManagementClass.cs
- PersistenceProviderDirectory.cs
- BooleanStorage.cs
- UdpDiscoveryEndpointProvider.cs
- GPStream.cs
- SiteMapNode.cs
- ComplexTypeEmitter.cs
- Menu.cs
- BuildResultCache.cs
- RotateTransform3D.cs
- _Events.cs
- ReadOnlyDataSource.cs
- ProcessInputEventArgs.cs
- Polyline.cs
- XamlBuildTaskServices.cs
- ContractNamespaceAttribute.cs
- RelatedImageListAttribute.cs
- TextEffectResolver.cs
- QualifierSet.cs
- XmlnsDictionary.cs
- EntityModelBuildProvider.cs
- IgnoreSection.cs
- OutputCacheModule.cs
- CodePageEncoding.cs
- AlternateView.cs
- DbConnectionPoolIdentity.cs
- ErrorTableItemStyle.cs
- NotifyCollectionChangedEventArgs.cs
- CodeTypeParameter.cs
- LogicalExpr.cs
- AppSettingsSection.cs
- DesignerActionListCollection.cs
- EndEvent.cs
- ConfigurationSection.cs
- EntityViewGenerator.cs
- SchemaImporter.cs
- SchemaDeclBase.cs
- CurrencyManager.cs
- LiteralControl.cs
- LineServicesRun.cs
- DebugViewWriter.cs
- ViewgenGatekeeper.cs
- _NativeSSPI.cs
- ThaiBuddhistCalendar.cs
- ProxyGenerationError.cs
- OperationPickerDialog.designer.cs
- BindingCompleteEventArgs.cs
- SystemWebExtensionsSectionGroup.cs
- StateChangeEvent.cs
- CompModSwitches.cs
- XPathDocument.cs
- HttpChannelListener.cs
- HyperLink.cs
- ForeignConstraint.cs
- ExpandCollapsePattern.cs
- XmlSerializationReader.cs
- StretchValidation.cs
- BaseUriWithWildcard.cs
- IdnElement.cs
- XmlNamespaceDeclarationsAttribute.cs
- CompareValidator.cs
- PopOutPanel.cs
- StyleSelector.cs
- DataGridColumnEventArgs.cs
- DbConnectionInternal.cs
- ServiceHostingEnvironment.cs
- IssuedTokenServiceElement.cs
- CommonDialog.cs
- ValueQuery.cs
- SqlConnectionHelper.cs