Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataWeb / Server / System / Data / Services / DelegateBodyWriter.cs / 1 / DelegateBodyWriter.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Provides a BodyWriter that invokes a callback on writing.
//
//
// @owner [....]
//---------------------------------------------------------------------
namespace System.Data.Services
{
#region Namespaces.
using System;
using System.Data.Services.Providers;
using System.Diagnostics;
using System.IO;
using System.ServiceModel.Channels;
using System.Xml;
#endregion Namespaces.
/// Use this class to handle writing body contents using a callback.
internal class DelegateBodyWriter : BodyWriter
{
#region Fields.
/// Service to dispose data source from once the response is written.
private readonly IDataService service;
/// Callback.
private readonly Action writerAction;
#endregion Fields.
/// Initializes a new instance.
/// Callback for writing.
/// Service to dispose data source from once the response is written.
internal DelegateBodyWriter(Action writer, IDataService service)
: base(false)
{
Debug.Assert(service != null, "service != null");
Debug.Assert(writer != null, "writer != null");
this.writerAction = writer;
this.service = service;
}
/// Called when the message body is written to an XML file.
///
/// An that is used to write this
/// message body to an XML file.
///
protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
{
Debug.Assert(writer != null, "writer != null");
try
{
writer.WriteStartElement(XmlConstants.WcfBinaryElementName);
using (XmlWriterStream stream = new XmlWriterStream(writer))
{
this.writerAction(stream);
}
writer.WriteEndElement();
}
finally
{
if (this.service != null)
{
this.service.DisposeDataSource();
HttpContextServiceHost host = this.service.Host as HttpContextServiceHost;
if (host != null)
{
if (host.ErrorFound)
{
var ctx = System.ServiceModel.OperationContext.Current;
if (ctx != null)
{
ctx.Channel.Abort();
}
}
}
}
}
}
#region Inner types.
/// Use this class to write to an .
internal class XmlWriterStream : Stream
{
/// Target writer.
private XmlDictionaryWriter innerWriter;
/// Initializes a new instance.
/// Target writer.
internal XmlWriterStream(XmlDictionaryWriter xmlWriter)
{
Debug.Assert(xmlWriter != null, "xmlWriter != null");
this.innerWriter = xmlWriter;
}
/// Gets a value indicating whether the current stream supports reading.
public override bool CanRead
{
get { return false; }
}
/// Gets a value indicating whether the current stream supports seeking.
public override bool CanSeek
{
get { return false; }
}
/// Gets a value indicating whether the current stream supports writing.
public override bool CanWrite
{
get { return true; }
}
/// Gets the length in bytes of the stream.
public override long Length
{
get { throw Error.NotSupported(); }
}
/// Gets or sets the position within the current stream.
public override long Position
{
get { throw Error.NotSupported(); }
set { throw Error.NotSupported(); }
}
///
/// Clears all buffers for this stream and causes any buffered
/// data to be written to the underlying device.
///
public override void Flush()
{
this.innerWriter.Flush();
}
///
/// Reads a sequence of bytes from the current stream and
/// advances the position within the stream by the number of bytes read.
///
///
/// An array of bytes. When this method returns, the buffer contains
/// the specified byte array with the values between
/// and ( + - 1) replaced
/// by the bytes read from the current source.
///
///
/// The zero-based byte offset in at which to
/// begin storing the data read from the current stream.
///
///
/// The maximum number of bytes to be read from the current stream.
///
/// The total number of bytes read into the buffer.
public override int Read(byte[] buffer, int offset, int count)
{
throw Error.NotSupported();
}
/// Sets the position within the current stream.
///
/// A byte offset relative to the parameter.
///
///
/// A value of type indicating the reference
/// point used to obtain the new position.
///
/// The new position within the current stream.
public override long Seek(long offset, SeekOrigin origin)
{
throw Error.NotSupported();
}
/// Sets the length of the current stream.
/// New value for length.
public override void SetLength(long value)
{
throw Error.NotSupported();
}
///
/// Writes a sequence of bytes to the current stream and advances
/// the current position within this stream by the number of
/// bytes written.
///
///
/// An array of bytes. This method copies
/// bytes from to the current stream.
///
///
/// The zero-based byte offset in buffer at which to begin copying
/// bytes to the current stream.
///
///
/// The number of bytes to be written to the current stream.
///
public override void Write(byte[] buffer, int offset, int count)
{
this.innerWriter.WriteBase64(buffer, offset, count);
}
}
#endregion Inner types.
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Provides a BodyWriter that invokes a callback on writing.
//
//
// @owner [....]
//---------------------------------------------------------------------
namespace System.Data.Services
{
#region Namespaces.
using System;
using System.Data.Services.Providers;
using System.Diagnostics;
using System.IO;
using System.ServiceModel.Channels;
using System.Xml;
#endregion Namespaces.
/// Use this class to handle writing body contents using a callback.
internal class DelegateBodyWriter : BodyWriter
{
#region Fields.
/// Service to dispose data source from once the response is written.
private readonly IDataService service;
/// Callback.
private readonly Action writerAction;
#endregion Fields.
/// Initializes a new instance.
/// Callback for writing.
/// Service to dispose data source from once the response is written.
internal DelegateBodyWriter(Action writer, IDataService service)
: base(false)
{
Debug.Assert(service != null, "service != null");
Debug.Assert(writer != null, "writer != null");
this.writerAction = writer;
this.service = service;
}
/// Called when the message body is written to an XML file.
///
/// An that is used to write this
/// message body to an XML file.
///
protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
{
Debug.Assert(writer != null, "writer != null");
try
{
writer.WriteStartElement(XmlConstants.WcfBinaryElementName);
using (XmlWriterStream stream = new XmlWriterStream(writer))
{
this.writerAction(stream);
}
writer.WriteEndElement();
}
finally
{
if (this.service != null)
{
this.service.DisposeDataSource();
HttpContextServiceHost host = this.service.Host as HttpContextServiceHost;
if (host != null)
{
if (host.ErrorFound)
{
var ctx = System.ServiceModel.OperationContext.Current;
if (ctx != null)
{
ctx.Channel.Abort();
}
}
}
}
}
}
#region Inner types.
/// Use this class to write to an .
internal class XmlWriterStream : Stream
{
/// Target writer.
private XmlDictionaryWriter innerWriter;
/// Initializes a new instance.
/// Target writer.
internal XmlWriterStream(XmlDictionaryWriter xmlWriter)
{
Debug.Assert(xmlWriter != null, "xmlWriter != null");
this.innerWriter = xmlWriter;
}
/// Gets a value indicating whether the current stream supports reading.
public override bool CanRead
{
get { return false; }
}
/// Gets a value indicating whether the current stream supports seeking.
public override bool CanSeek
{
get { return false; }
}
/// Gets a value indicating whether the current stream supports writing.
public override bool CanWrite
{
get { return true; }
}
/// Gets the length in bytes of the stream.
public override long Length
{
get { throw Error.NotSupported(); }
}
/// Gets or sets the position within the current stream.
public override long Position
{
get { throw Error.NotSupported(); }
set { throw Error.NotSupported(); }
}
///
/// Clears all buffers for this stream and causes any buffered
/// data to be written to the underlying device.
///
public override void Flush()
{
this.innerWriter.Flush();
}
///
/// Reads a sequence of bytes from the current stream and
/// advances the position within the stream by the number of bytes read.
///
///
/// An array of bytes. When this method returns, the buffer contains
/// the specified byte array with the values between
/// and ( + - 1) replaced
/// by the bytes read from the current source.
///
///
/// The zero-based byte offset in at which to
/// begin storing the data read from the current stream.
///
///
/// The maximum number of bytes to be read from the current stream.
///
/// The total number of bytes read into the buffer.
public override int Read(byte[] buffer, int offset, int count)
{
throw Error.NotSupported();
}
/// Sets the position within the current stream.
///
/// A byte offset relative to the parameter.
///
///
/// A value of type indicating the reference
/// point used to obtain the new position.
///
/// The new position within the current stream.
public override long Seek(long offset, SeekOrigin origin)
{
throw Error.NotSupported();
}
/// Sets the length of the current stream.
/// New value for length.
public override void SetLength(long value)
{
throw Error.NotSupported();
}
///
/// Writes a sequence of bytes to the current stream and advances
/// the current position within this stream by the number of
/// bytes written.
///
///
/// An array of bytes. This method copies
/// bytes from to the current stream.
///
///
/// The zero-based byte offset in buffer at which to begin copying
/// bytes to the current stream.
///
///
/// The number of bytes to be written to the current stream.
///
public override void Write(byte[] buffer, int offset, int count)
{
this.innerWriter.WriteBase64(buffer, offset, count);
}
}
#endregion Inner types.
}
}
// 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
- CodeGeneratorOptions.cs
- TypeBinaryExpression.cs
- DataObjectPastingEventArgs.cs
- MethodSet.cs
- HttpInputStream.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- PackUriHelper.cs
- _CacheStreams.cs
- Splitter.cs
- TranslateTransform3D.cs
- Focus.cs
- IdentityNotMappedException.cs
- CodeAccessSecurityEngine.cs
- PartialCachingAttribute.cs
- NetworkInformationPermission.cs
- PaintEvent.cs
- EventHandlerService.cs
- SignatureHelper.cs
- XmlHierarchyData.cs
- ExclusiveTcpTransportManager.cs
- UrlPath.cs
- SkipStoryboardToFill.cs
- initElementDictionary.cs
- VarRefManager.cs
- InstanceKeyCompleteException.cs
- Literal.cs
- ModelPerspective.cs
- SortedDictionary.cs
- ItemMap.cs
- ColumnMapCopier.cs
- ProgressBarAutomationPeer.cs
- PerfCounterSection.cs
- HostingEnvironmentSection.cs
- AlternationConverter.cs
- OrderToken.cs
- StateMachineTimers.cs
- DbConnectionPool.cs
- ListBox.cs
- StateMachineDesignerPaint.cs
- COSERVERINFO.cs
- DataGridViewSelectedColumnCollection.cs
- ControlDesigner.cs
- SqlUtils.cs
- DbgUtil.cs
- RootBuilder.cs
- DropDownList.cs
- Button.cs
- EventHandlersStore.cs
- ToolStripDropDown.cs
- HideDisabledControlAdapter.cs
- TraceLog.cs
- IPAddress.cs
- EventDescriptor.cs
- UInt32Converter.cs
- Brushes.cs
- GcSettings.cs
- OracleInternalConnection.cs
- InkSerializer.cs
- TextElement.cs
- BooleanProjectedSlot.cs
- RuleSettingsCollection.cs
- RoutingEndpointTrait.cs
- ProcessHostServerConfig.cs
- ObjectDataSourceDisposingEventArgs.cs
- CircleHotSpot.cs
- DocumentAutomationPeer.cs
- ContextBase.cs
- PathGeometry.cs
- HtmlFormParameterWriter.cs
- MissingMemberException.cs
- ReliableChannelFactory.cs
- FormViewInsertEventArgs.cs
- WbemProvider.cs
- XpsDocument.cs
- StrongTypingException.cs
- XmlQueryType.cs
- DPTypeDescriptorContext.cs
- mongolianshape.cs
- ValueUtilsSmi.cs
- DocumentEventArgs.cs
- PrintPreviewControl.cs
- SqlFactory.cs
- SaveFileDialog.cs
- StorageEntitySetMapping.cs
- PerformanceCounterCategory.cs
- ExpressionNode.cs
- SymmetricKeyWrap.cs
- ContainerUtilities.cs
- TableProviderWrapper.cs
- AbstractDataSvcMapFileLoader.cs
- ResourceDescriptionAttribute.cs
- ServerType.cs
- PrintEvent.cs
- DefaultTextStoreTextComposition.cs
- QuaternionRotation3D.cs
- DbParameterCollectionHelper.cs
- TemplateXamlParser.cs
- UnsafeNativeMethods.cs
- DeflateStream.cs
- PrinterResolution.cs