Skip to content

Commit e3855ca

Browse files
Merge pull request #1132 from andersjonsson/async-readmessage
Async readmessage
2 parents 073d5ca + 66736ad commit e3855ca

File tree

4 files changed

+21
-10
lines changed

4 files changed

+21
-10
lines changed

src/SoapCore/MessageEncoder/SoapMessageEncoder.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,18 +128,18 @@ public bool IsContentTypeSupported(string contentType, bool checkCharset)
128128
return false;
129129
}
130130

131-
public Message ReadMessage(PipeReader pipeReader, int maxSizeOfHeaders, string contentType)
131+
public async Task<Message> ReadMessageAsync(PipeReader pipeReader, int maxSizeOfHeaders, string contentType)
132132
{
133133
if (pipeReader == null)
134134
{
135135
throw new ArgumentNullException(nameof(pipeReader));
136136
}
137137

138138
using var stream = pipeReader.AsStream(true);
139-
return ReadMessage(stream, maxSizeOfHeaders, contentType);
139+
return await ReadMessageAsync(stream, maxSizeOfHeaders, contentType);
140140
}
141141

142-
public Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
142+
public async Task<Message> ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType)
143143
{
144144
if (stream == null)
145145
{
@@ -158,7 +158,7 @@ public Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentTy
158158

159159
var streamReaderWithEncoding = new StreamReader(stream, readEncoding);
160160

161-
message = ParsedMessage.FromStreamReader(streamReaderWithEncoding, MessageVersion);
161+
message = await ParsedMessage.FromStreamReaderAsync(streamReaderWithEncoding, MessageVersion);
162162

163163
return message;
164164
}

src/SoapCore/ParsedMessage.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using System.ServiceModel.Channels;
55
using System.Text;
6+
using System.Threading;
67
using System.Threading.Tasks;
78
using System.Xml;
89
using System.Xml.Linq;
@@ -33,7 +34,10 @@ public ParsedMessage(MessageHeaders headers, MessageProperties properties, Messa
3334

3435
public override bool IsEmpty => _isEmpty;
3536

36-
public static ParsedMessage FromStreamReader(StreamReader stream, MessageVersion version)
37+
#if !NETCOREAPP3_0_OR_GREATER
38+
#pragma warning disable CS1998 // XDocument.LoadAsync does only exists in NETCOREAPP3_0_OR_GREATER
39+
#endif
40+
public static async Task<ParsedMessage> FromStreamReaderAsync(StreamReader stream, MessageVersion version)
3741
{
3842
if (stream == null)
3943
{
@@ -45,14 +49,21 @@ public static ParsedMessage FromStreamReader(StreamReader stream, MessageVersion
4549
throw new ArgumentNullException(nameof(version));
4650
}
4751

52+
#if NETCOREAPP3_0_OR_GREATER
53+
var envelope = await XDocument.LoadAsync(stream, LoadOptions.None, CancellationToken.None);
54+
#else
4855
var envelope = XDocument.Load(stream);
56+
#endif
4957
var headers = ExtractSoapHeaders(envelope, version);
5058

5159
//var properties = ExtractSoapProperties(httpRequest);
5260
(var body, var isEmpty) = ExtractSoapBody(envelope, version);
5361

5462
return new ParsedMessage(headers, new MessageProperties(), version, body, isEmpty);
5563
}
64+
#if !NETCOREAPP3_0_OR_GREATER
65+
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
66+
#endif
5667

5768
public XDocument GetBodyAsXDocument()
5869
{

src/SoapCore/SoapCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<Description>SOAP protocol middleware for ASP.NET Core</Description>
5-
<Version>1.2.1.3</Version>
5+
<Version>1.2.1.4</Version>
66
<Authors>Digital Design</Authors>
77
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;netcoreapp3.1;</TargetFrameworks>
88
<PackageId>SoapCore</PackageId>

src/SoapCore/SoapEndpointMiddleware.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,20 +224,20 @@ private async Task<Message> ReadMessageAsync(HttpContext httpContext, SoapMessag
224224
if (messageEncoder.IsContentTypeSupported(multipartSection.ContentType, true)
225225
|| messageEncoder.IsContentTypeSupported(multipartSection.ContentType, false))
226226
{
227-
return messageEncoder.ReadMessage(multipartSection.Body, messageEncoder.MaxSoapHeaderSize, multipartSection.ContentType);
227+
return await messageEncoder.ReadMessageAsync(multipartSection.Body, messageEncoder.MaxSoapHeaderSize, multipartSection.ContentType);
228228
}
229229
}
230230
}
231231

232232
#if !NETCOREAPP3_0_OR_GREATER
233-
return messageEncoder.ReadMessage(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType);
233+
return await messageEncoder.ReadMessageAsync(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType);
234234
#else
235235
if (httpContext.Request.Body is FileBufferingReadStream)
236236
{
237-
return messageEncoder.ReadMessage(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType);
237+
return await messageEncoder.ReadMessageAsync(httpContext.Request.Body, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType);
238238
}
239239

240-
return messageEncoder.ReadMessage(httpContext.Request.BodyReader, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType);
240+
return await messageEncoder.ReadMessageAsync(httpContext.Request.BodyReader, messageEncoder.MaxSoapHeaderSize, httpContext.Request.ContentType);
241241
#endif
242242
}
243243

0 commit comments

Comments
 (0)