private async Task ProcessRequest(Stream stream) { using (var textReader = new StreamReader(stream)) { using (var jsonReader = new JsonTextReader(textReader)) { var requestPayload = Serializer.Deserialize <RequestPayload>(jsonReader); var request = new ReceiveRequest() { Verb = requestPayload.Verb, Path = requestPayload.Path, Streams = new List <IContentStream>(), }; if (requestPayload.Streams != null) { foreach (var streamDescription in requestPayload.Streams) { if (!Guid.TryParse(streamDescription.Id, out Guid id)) { throw new InvalidDataException($"Stream description id '{streamDescription.Id}' is not a Guid"); } var streamAssembler = _streamManager.GetPayloadAssembler(id); streamAssembler.ContentType = streamDescription.ContentType; streamAssembler.ContentLength = streamDescription.Length; request.Streams.Add(new ContentStream(id, streamAssembler) { Length = streamDescription.Length, ContentType = streamDescription.ContentType, }); } } await _onCompleted(this.Id, request).ConfigureAwait(false); } } }