From 428de03898b1ffa12513e7f368b491fd26bdf9e1 Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 09:13:57 -0500 Subject: [PATCH 01/12] replaced stream with memoryStream for reading the message. --- src/SoapCore/MessageEncoder/SoapMessageEncoder.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 82e964fa..1b6a5cbc 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -130,13 +130,17 @@ public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOf return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType); } - public Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) + public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } + using var memoryStream = new MemoryStream(); + await stream.CopyToAsync(memoryStream); + memoryStream.Position = 0; + XmlReader reader; var readEncoding = SoapMessageEncoderDefaults.ContentTypeToEncoding(contentType); @@ -151,18 +155,18 @@ public Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, strin if (supportXmlDictionaryReader) { - reader = XmlDictionaryReader.CreateTextReader(stream, readEncoding, ReaderQuotas, dictionaryReader => { }); + reader = XmlDictionaryReader.CreateTextReader(memoryStream, readEncoding, ReaderQuotas, dictionaryReader => { }); } else { - var streamReaderWithEncoding = new StreamReader(stream, readEncoding); + var streamReaderWithEncoding = new StreamReader(memoryStream, readEncoding); var xmlReaderSettings = new XmlReaderSettings() { IgnoreWhitespace = true, DtdProcessing = DtdProcessing.Prohibit, CloseInput = true }; reader = XmlReader.Create(streamReaderWithEncoding, xmlReaderSettings); } Message message = Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion); - return Task.FromResult(message); + return message; } public virtual async Task WriteMessageAsync(Message message, HttpContext httpContext, PipeWriter pipeWriter, bool indentXml) From 9e59d16f1f898e9032e404fc53f375c80b5ccede Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 09:31:56 -0500 Subject: [PATCH 02/12] stream gets used afterwards --- src/SoapCore/MessageEncoder/SoapMessageEncoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 1b6a5cbc..77daba03 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -137,7 +137,7 @@ public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, throw new ArgumentNullException(nameof(stream)); } - using var memoryStream = new MemoryStream(); + var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); memoryStream.Position = 0; From 22703d647a27a1535c1cf36f31428b2689fa4ec5 Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 10:35:58 -0500 Subject: [PATCH 03/12] dispose the memory stream after its use --- src/SoapCore/MessageEncoder/SoapMessageEncoder.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 77daba03..4ec3875b 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -119,7 +119,7 @@ public bool IsContentTypeSupported(string contentType, bool checkCharset) return false; } - public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOfHeaders, string contentType) + public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOfHeaders, string contentType, MemoryStream memoryStream) { if (pipeReader == null) { @@ -127,17 +127,17 @@ public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOf } using var stream = pipeReader.AsStream(true); - return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType); + return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType, memoryStream); } - public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) + public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType, MemoryStream memoryStream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } - var memoryStream = new MemoryStream(); + memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); memoryStream.Position = 0; From 306667ad2ea78d876a5994441c1d3115c0986dcc Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 10:36:24 -0500 Subject: [PATCH 04/12] memory stream changes --- src/SoapCore/SoapEndpointMiddleware.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/SoapCore/SoapEndpointMiddleware.cs b/src/SoapCore/SoapEndpointMiddleware.cs index a4a58152..f88f6a28 100644 --- a/src/SoapCore/SoapEndpointMiddleware.cs +++ b/src/SoapCore/SoapEndpointMiddleware.cs @@ -207,7 +207,7 @@ private static string TryGetMultipartBoundary(HttpRequest request) return boundaryValue.Trim('"'); } - private async Task ReadMessageAsync(HttpContext httpContext, SoapMessageEncoder messageEncoder) + private async Task ReadMessageAsync(HttpContext httpContext, SoapMessageEncoder messageEncoder, MemoryStream memoryStream) { var boundary = TryGetMultipartBoundary(httpContext.Request); @@ -227,14 +227,14 @@ private async Task ReadMessageAsync(HttpContext httpContext, SoapMessag if (messageEncoder.IsContentTypeSupported(multipartSection.ContentType, true) || messageEncoder.IsContentTypeSupported(multipartSection.ContentType, false)) { - return await messageEncoder.ReadMessageAsync(multipartSection.Body, messageEncoder.MaxSoapHeaderSize, multipartSection.ContentType); + return await messageEncoder.ReadMessageAsync(multipartSection.Body, messageEncoder.MaxSoapHeaderSize, multipartSection.ContentType, memoryStream); } } } #if !NETCOREAPP3_0_OR_GREATER - return await messageEncoder.ReadMessageAsync(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType); + return await messageEncoder.ReadMessageAsync(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType, memoryStream); #else - return await messageEncoder.ReadMessageAsync(httpContext.Request.BodyReader, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType); + return await messageEncoder.ReadMessageAsync(httpContext.Request.BodyReader, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType, memoryStream); #endif } @@ -289,11 +289,11 @@ private async Task ProcessOperation(HttpContext httpContext, IServiceProvider se Message requestMessage = null; Message responseMessage = null; - + MemoryStream memoryStream = null; try { //Get the message - requestMessage = await ReadMessageAsync(httpContext, messageEncoder); + requestMessage = await ReadMessageAsync(httpContext, messageEncoder, memoryStream); var asyncMessageFilters = serviceProvider.GetServices().ToArray(); @@ -330,11 +330,16 @@ private async Task ProcessOperation(HttpContext httpContext, IServiceProvider se responseMessage = CreateErrorResponseMessage(ex, status, serviceProvider, requestMessage, messageEncoder, httpContext); } + finally + { + memoryStream?.Dispose(); + } if (responseMessage != null) { await WriteMessageAsync(messageEncoder, responseMessage, httpContext, _options.IndentXml); } + } private async Task ProcessHttpOperation(HttpContext context, IServiceProvider serviceProvider, string methodName) From 9204897b1bfc10ad30029605d5edc81327f1f931 Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 14:39:37 -0500 Subject: [PATCH 05/12] Revert "memory stream changes" This reverts commit 306667ad2ea78d876a5994441c1d3115c0986dcc. --- src/SoapCore/SoapEndpointMiddleware.cs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/SoapCore/SoapEndpointMiddleware.cs b/src/SoapCore/SoapEndpointMiddleware.cs index f88f6a28..a4a58152 100644 --- a/src/SoapCore/SoapEndpointMiddleware.cs +++ b/src/SoapCore/SoapEndpointMiddleware.cs @@ -207,7 +207,7 @@ private static string TryGetMultipartBoundary(HttpRequest request) return boundaryValue.Trim('"'); } - private async Task ReadMessageAsync(HttpContext httpContext, SoapMessageEncoder messageEncoder, MemoryStream memoryStream) + private async Task ReadMessageAsync(HttpContext httpContext, SoapMessageEncoder messageEncoder) { var boundary = TryGetMultipartBoundary(httpContext.Request); @@ -227,14 +227,14 @@ private async Task ReadMessageAsync(HttpContext httpContext, SoapMessag if (messageEncoder.IsContentTypeSupported(multipartSection.ContentType, true) || messageEncoder.IsContentTypeSupported(multipartSection.ContentType, false)) { - return await messageEncoder.ReadMessageAsync(multipartSection.Body, messageEncoder.MaxSoapHeaderSize, multipartSection.ContentType, memoryStream); + return await messageEncoder.ReadMessageAsync(multipartSection.Body, messageEncoder.MaxSoapHeaderSize, multipartSection.ContentType); } } } #if !NETCOREAPP3_0_OR_GREATER - return await messageEncoder.ReadMessageAsync(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType, memoryStream); + return await messageEncoder.ReadMessageAsync(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType); #else - return await messageEncoder.ReadMessageAsync(httpContext.Request.BodyReader, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType, memoryStream); + return await messageEncoder.ReadMessageAsync(httpContext.Request.BodyReader, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType); #endif } @@ -289,11 +289,11 @@ private async Task ProcessOperation(HttpContext httpContext, IServiceProvider se Message requestMessage = null; Message responseMessage = null; - MemoryStream memoryStream = null; + try { //Get the message - requestMessage = await ReadMessageAsync(httpContext, messageEncoder, memoryStream); + requestMessage = await ReadMessageAsync(httpContext, messageEncoder); var asyncMessageFilters = serviceProvider.GetServices().ToArray(); @@ -330,16 +330,11 @@ private async Task ProcessOperation(HttpContext httpContext, IServiceProvider se responseMessage = CreateErrorResponseMessage(ex, status, serviceProvider, requestMessage, messageEncoder, httpContext); } - finally - { - memoryStream?.Dispose(); - } if (responseMessage != null) { await WriteMessageAsync(messageEncoder, responseMessage, httpContext, _options.IndentXml); } - } private async Task ProcessHttpOperation(HttpContext context, IServiceProvider serviceProvider, string methodName) From 244affcca36f34a34de6f251415106b3969f208d Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 14:40:07 -0500 Subject: [PATCH 06/12] Revert "dispose the memory stream after its use" This reverts commit 22703d647a27a1535c1cf36f31428b2689fa4ec5. --- src/SoapCore/MessageEncoder/SoapMessageEncoder.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 4ec3875b..77daba03 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -119,7 +119,7 @@ public bool IsContentTypeSupported(string contentType, bool checkCharset) return false; } - public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOfHeaders, string contentType, MemoryStream memoryStream) + public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOfHeaders, string contentType) { if (pipeReader == null) { @@ -127,17 +127,17 @@ public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOf } using var stream = pipeReader.AsStream(true); - return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType, memoryStream); + return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType); } - public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType, MemoryStream memoryStream) + public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } - memoryStream = new MemoryStream(); + var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); memoryStream.Position = 0; From 885098b36be33a9a85415059b32005178abb443f Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 14:40:33 -0500 Subject: [PATCH 07/12] Revert "stream gets used afterwards" This reverts commit 9e59d16f1f898e9032e404fc53f375c80b5ccede. --- src/SoapCore/MessageEncoder/SoapMessageEncoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 77daba03..1b6a5cbc 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -137,7 +137,7 @@ public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, throw new ArgumentNullException(nameof(stream)); } - var memoryStream = new MemoryStream(); + using var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); memoryStream.Position = 0; From 44fc9dcee5890c34970bc44c61853b3ecb6e2038 Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 14:41:45 -0500 Subject: [PATCH 08/12] Revert "replaced stream with memoryStream for reading the message." This reverts commit 428de03898b1ffa12513e7f368b491fd26bdf9e1. --- src/SoapCore/MessageEncoder/SoapMessageEncoder.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 1b6a5cbc..82e964fa 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -130,17 +130,13 @@ public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOf return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType); } - public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) + public Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } - using var memoryStream = new MemoryStream(); - await stream.CopyToAsync(memoryStream); - memoryStream.Position = 0; - XmlReader reader; var readEncoding = SoapMessageEncoderDefaults.ContentTypeToEncoding(contentType); @@ -155,18 +151,18 @@ public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, if (supportXmlDictionaryReader) { - reader = XmlDictionaryReader.CreateTextReader(memoryStream, readEncoding, ReaderQuotas, dictionaryReader => { }); + reader = XmlDictionaryReader.CreateTextReader(stream, readEncoding, ReaderQuotas, dictionaryReader => { }); } else { - var streamReaderWithEncoding = new StreamReader(memoryStream, readEncoding); + var streamReaderWithEncoding = new StreamReader(stream, readEncoding); var xmlReaderSettings = new XmlReaderSettings() { IgnoreWhitespace = true, DtdProcessing = DtdProcessing.Prohibit, CloseInput = true }; reader = XmlReader.Create(streamReaderWithEncoding, xmlReaderSettings); } Message message = Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion); - return message; + return Task.FromResult(message); } public virtual async Task WriteMessageAsync(Message message, HttpContext httpContext, PipeWriter pipeWriter, bool indentXml) From 59023fe1e0b811f257140f1e5f02c4730ba361ce Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Tue, 27 Feb 2024 14:44:26 -0500 Subject: [PATCH 09/12] creating a buffered copy of message --- src/SoapCore/SoapEndpointMiddleware.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/SoapCore/SoapEndpointMiddleware.cs b/src/SoapCore/SoapEndpointMiddleware.cs index a4a58152..e4d33a94 100644 --- a/src/SoapCore/SoapEndpointMiddleware.cs +++ b/src/SoapCore/SoapEndpointMiddleware.cs @@ -479,6 +479,10 @@ private async Task ProcessMessage(Message requestMessage, SoapMessageEn XmlDictionaryReader reader = null; if (!requestMessage.IsEmpty) { + MessageBuffer mb = requestMessage.CreateBufferedCopy(int.MaxValue); + Message responseMsg = mb.CreateMessage(); + requestMessage = mb.CreateMessage(); + reader = requestMessage.GetReaderAtBodyContents(); } From 5dca773338cf871b8d3f1f9bb66037a9a113beea Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Wed, 28 Feb 2024 03:52:36 -0500 Subject: [PATCH 10/12] Revert "creating a buffered copy of message" This reverts commit 59023fe1e0b811f257140f1e5f02c4730ba361ce. --- src/SoapCore/SoapEndpointMiddleware.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/SoapCore/SoapEndpointMiddleware.cs b/src/SoapCore/SoapEndpointMiddleware.cs index e4d33a94..a4a58152 100644 --- a/src/SoapCore/SoapEndpointMiddleware.cs +++ b/src/SoapCore/SoapEndpointMiddleware.cs @@ -479,10 +479,6 @@ private async Task ProcessMessage(Message requestMessage, SoapMessageEn XmlDictionaryReader reader = null; if (!requestMessage.IsEmpty) { - MessageBuffer mb = requestMessage.CreateBufferedCopy(int.MaxValue); - Message responseMsg = mb.CreateMessage(); - requestMessage = mb.CreateMessage(); - reader = requestMessage.GetReaderAtBodyContents(); } From 8636d06fd535dfb25d40f6034768338b2139d436 Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Wed, 28 Feb 2024 04:04:35 -0500 Subject: [PATCH 11/12] create buffered copy of message --- src/SoapCore/MessageEncoder/SoapMessageEncoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 82e964fa..943d31e6 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -160,7 +160,7 @@ public Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, strin reader = XmlReader.Create(streamReaderWithEncoding, xmlReaderSettings); } - Message message = Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion); + Message message = Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion).CreateBufferedCopy(int.MaxValue).CreateMessage(); return Task.FromResult(message); } From 07ded901ad25acfa91d423d3cc9a576f56666254 Mon Sep 17 00:00:00 2001 From: Akshay Bheda Date: Wed, 28 Feb 2024 10:47:18 -0500 Subject: [PATCH 12/12] changes to make it async --- .../MessageEncoder/SoapMessageEncoder.cs | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs index 943d31e6..c655f236 100644 --- a/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs +++ b/src/SoapCore/MessageEncoder/SoapMessageEncoder.cs @@ -130,39 +130,46 @@ public async Task ReadMessageAsync(PipeReader pipeReader, int maxSizeOf return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType); } - public Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) + public async Task ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } - XmlReader reader; + Message message; - var readEncoding = SoapMessageEncoderDefaults.ContentTypeToEncoding(contentType); - - if (readEncoding == null) + using (var ms = new MemoryStream()) { - // Fallback to default or writeEncoding - readEncoding = _writeEncoding; - } + await stream.CopyToAsync(ms); + ms.Seek(0, SeekOrigin.Begin); + XmlReader reader; - var supportXmlDictionaryReader = SoapMessageEncoderDefaults.TryValidateEncoding(readEncoding, out _); + var readEncoding = SoapMessageEncoderDefaults.ContentTypeToEncoding(contentType); - if (supportXmlDictionaryReader) - { - reader = XmlDictionaryReader.CreateTextReader(stream, readEncoding, ReaderQuotas, dictionaryReader => { }); - } - else - { - var streamReaderWithEncoding = new StreamReader(stream, readEncoding); - var xmlReaderSettings = new XmlReaderSettings() { IgnoreWhitespace = true, DtdProcessing = DtdProcessing.Prohibit, CloseInput = true }; - reader = XmlReader.Create(streamReaderWithEncoding, xmlReaderSettings); - } + if (readEncoding == null) + { + // Fallback to default or writeEncoding + readEncoding = _writeEncoding; + } + + var supportXmlDictionaryReader = SoapMessageEncoderDefaults.TryValidateEncoding(readEncoding, out _); + + if (supportXmlDictionaryReader) + { + reader = XmlDictionaryReader.CreateTextReader(ms, readEncoding, ReaderQuotas, dictionaryReader => { }); + } + else + { + var streamReaderWithEncoding = new StreamReader(ms, readEncoding); + var xmlReaderSettings = new XmlReaderSettings() { IgnoreWhitespace = true, DtdProcessing = DtdProcessing.Prohibit, CloseInput = true }; + reader = XmlReader.Create(streamReaderWithEncoding, xmlReaderSettings); + } - Message message = Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion).CreateBufferedCopy(int.MaxValue).CreateMessage(); + message = Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion).CreateBufferedCopy(int.MaxValue).CreateMessage(); + } - return Task.FromResult(message); + return message; } public virtual async Task WriteMessageAsync(Message message, HttpContext httpContext, PipeWriter pipeWriter, bool indentXml)