public override ArraySegment <byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("message")); } if (bufferManager == null) { throw TraceUtility.ThrowHelperError(new ArgumentNullException("bufferManager"), message); } if (maxMessageSize < 0) { throw TraceUtility.ThrowHelperError(new ArgumentOutOfRangeException("maxMessageSize", maxMessageSize, System.ServiceModel.SR.GetString("ValueMustBeNonNegative")), message); } if ((messageOffset < 0) || (messageOffset > maxMessageSize)) { throw TraceUtility.ThrowHelperError(new ArgumentOutOfRangeException("messageOffset", messageOffset, System.ServiceModel.SR.GetString("ValueMustBeInRange", new object[] { 0, maxMessageSize })), message); } base.ThrowIfMismatchedMessageVersion(message); message.Properties.Encoder = this; TextBufferedMessageWriter messageWriter = this.TakeBufferedWriter(); ArraySegment <byte> segment = messageWriter.WriteMessage(message, bufferManager, messageOffset, maxMessageSize); this.ReturnMessageWriter(messageWriter); if (MessageLogger.LogMessagesAtTransportLevel) { XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(segment.Array, segment.Offset, segment.Count, null, XmlDictionaryReaderQuotas.Max, null); MessageLogger.LogMessage(ref message, reader, MessageLoggingSource.TransportSend); } return(segment); }
public override ArraySegment <byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(message))); } if (bufferManager == null) { throw TraceUtility.ThrowHelperError(new ArgumentNullException(nameof(bufferManager)), message); } if (maxMessageSize < 0) { throw TraceUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(maxMessageSize), maxMessageSize, SR.ValueMustBeNonNegative), message); } if (messageOffset < 0 || messageOffset > maxMessageSize) { throw TraceUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(messageOffset), messageOffset, SR.Format(SR.ValueMustBeInRange, 0, maxMessageSize)), message); } ThrowIfMismatchedMessageVersion(message); message.Properties.Encoder = this; TextBufferedMessageWriter messageWriter = TakeBufferedWriter(); ArraySegment <byte> messageData = messageWriter.WriteMessage(message, bufferManager, messageOffset, maxMessageSize); ReturnMessageWriter(messageWriter); return(messageData); }
public override Task <ArraySegment <byte> > WriteMessageAsync(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(message))); } if (bufferManager == null) { throw TraceUtility.ThrowHelperError(new ArgumentNullException(nameof(bufferManager)), message); } if (maxMessageSize < 0) { throw TraceUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(maxMessageSize), maxMessageSize, SR.ValueMustBeNonNegative), message); } if (messageOffset < 0 || messageOffset > maxMessageSize) { throw TraceUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(messageOffset), messageOffset, SR.Format(SR.ValueMustBeInRange, 0, maxMessageSize)), message); } ThrowIfMismatchedMessageVersion(message); EventTraceActivity eventTraceActivity = null; if (WcfEventSource.Instance.TextMessageEncodingStartIsEnabled()) { eventTraceActivity = EventTraceActivityHelper.TryExtractActivity(message); WcfEventSource.Instance.TextMessageEncodingStart(eventTraceActivity); } message.Properties.Encoder = this; TextBufferedMessageWriter messageWriter = TakeBufferedWriter(); ArraySegment <byte> messageData = messageWriter.WriteMessage(message, bufferManager, messageOffset, maxMessageSize); ReturnMessageWriter(messageWriter); if (WcfEventSource.Instance.MessageWrittenByEncoderIsEnabled()) { WcfEventSource.Instance.MessageWrittenByEncoder( eventTraceActivity ?? EventTraceActivityHelper.TryExtractActivity(message), messageData.Count, this); } if (MessageLogger.LogMessagesAtTransportLevel) { XmlDictionaryReader xmlDictionaryReader = XmlDictionaryReader.CreateTextReader(messageData.Array, messageData.Offset, messageData.Count, XmlDictionaryReaderQuotas.Max); MessageLogger.LogMessage(ref message, xmlDictionaryReader, MessageLoggingSource.TransportSend); } return(Task.FromResult(messageData)); }