Beispiel #1
0
            private TextBufferedMessageWriter TakeBufferedWriter()
            {
                if (_bufferedWriterPool == null)
                {
                    lock (ThisLock)
                    {
                        if (_bufferedWriterPool == null)
                        {
                            _bufferedWriterPool = new SynchronizedPool <TextBufferedMessageWriter>(_maxWritePoolSize);
                        }
                    }
                }

                TextBufferedMessageWriter messageWriter = _bufferedWriterPool.Take();

                if (messageWriter == null)
                {
                    messageWriter = new TextBufferedMessageWriter(this);
                    if (WcfEventSource.Instance.WritePoolMissIsEnabled())
                    {
                        WcfEventSource.Instance.WritePoolMiss(messageWriter.GetType().Name);
                    }
                }
                return(messageWriter);
            }
Beispiel #2
0
            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);
            }
            TextBufferedMessageWriter TakeBufferedWriter()
            {
                if (bufferedWriterPool == null)
                {
                    lock (ThisLock)
                    {
                        if (bufferedWriterPool == null)
                        {
                            bufferedWriterPool = new SynchronizedPool <TextBufferedMessageWriter>(maxWritePoolSize);
                        }
                    }
                }

                TextBufferedMessageWriter messageWriter = bufferedWriterPool.Take();

                if (messageWriter == null)
                {
                    messageWriter = new TextBufferedMessageWriter(this);
                    if (TD.WritePoolMissIsEnabled())
                    {
                        TD.WritePoolMiss(messageWriter.GetType().Name);
                    }
                }
                return(messageWriter);
            }
Beispiel #4
0
            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);
            }
Beispiel #5
0
            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));
            }
Beispiel #6
0
            private TextBufferedMessageWriter TakeBufferedWriter()
            {
                if (this.bufferedWriterPool == null)
                {
                    lock (this.ThisLock)
                    {
                        if (this.bufferedWriterPool == null)
                        {
                            this.bufferedWriterPool = new SynchronizedPool <TextBufferedMessageWriter>(this.maxWritePoolSize);
                        }
                    }
                }
                TextBufferedMessageWriter writer = this.bufferedWriterPool.Take();

                if (writer == null)
                {
                    writer = new TextBufferedMessageWriter(this);
                }
                return(writer);
            }
Beispiel #7
0
            private TextBufferedMessageWriter TakeBufferedWriter()
            {
                if (_bufferedWriterPool == null)
                {
                    lock (ThisLock)
                    {
                        if (_bufferedWriterPool == null)
                        {
                            _bufferedWriterPool = new SynchronizedPool <TextBufferedMessageWriter>(MaxWritePoolSize);
                        }
                    }
                }

                TextBufferedMessageWriter messageWriter = _bufferedWriterPool.Take();

                if (messageWriter == null)
                {
                    messageWriter = new TextBufferedMessageWriter(this);
                }
                return(messageWriter);
            }
Beispiel #8
0
 private void ReturnMessageWriter(TextBufferedMessageWriter messageWriter)
 {
     _bufferedWriterPool.Return(messageWriter);
 }
Beispiel #9
0
 void ReturnMessageWriter(TextBufferedMessageWriter messageWriter)
 {
     bufferedWriterPool.Return(messageWriter);
 }
Beispiel #10
0
            TextBufferedMessageWriter TakeBufferedWriter()
            {
                if (bufferedWriterPool == null)
                {
                    lock (ThisLock)
                    {
                        if (bufferedWriterPool == null)
                        {
                            bufferedWriterPool = new SynchronizedPool<TextBufferedMessageWriter>(maxWritePoolSize);
                        }
                    }
                }

                TextBufferedMessageWriter messageWriter = bufferedWriterPool.Take();
                if (messageWriter == null)
                {
                    messageWriter = new TextBufferedMessageWriter(this);
                    if (TD.WritePoolMissIsEnabled())
                    {
                        TD.WritePoolMiss(messageWriter.GetType().Name);
                    }
                }
                return messageWriter;
            }
Beispiel #11
0
            private TextBufferedMessageWriter TakeBufferedWriter()
            {
                if (_bufferedWriterPool == null)
                {
                    lock (ThisLock)
                    {
                        if (_bufferedWriterPool == null)
                        {
                            _bufferedWriterPool = new SynchronizedPool<TextBufferedMessageWriter>(_maxWritePoolSize);
                        }
                    }
                }

                TextBufferedMessageWriter messageWriter = _bufferedWriterPool.Take();
                if (messageWriter == null)
                {
                    messageWriter = new TextBufferedMessageWriter(this);
                    if (WcfEventSource.Instance.WritePoolMissIsEnabled())
                    {
                        WcfEventSource.Instance.WritePoolMiss(messageWriter.GetType().Name);
                    }
                }
                return messageWriter;
            }