示例#1
0
        public virtual Stream ProcessAsynchronously(Stream requestStream)
        {
            DateTime now        = DateTime.Now;
            string   asyncToken = now.Ticks.ToString(CultureInfo.InvariantCulture);

            AsyncTask asyncTask = null;

            if (requestStream == null)
            {
                asyncTask = new AsyncTask(this, this.CreateRequestMessage(null), now.AddSeconds(AsyncTask.DefaultDuration));
            }
            else
            {
                StreamPipe requestPipe = new StreamPipe();
                using (requestPipe.WriteStream)
                {
                    requestStream.CopyTo(requestPipe.WriteStream); // read the input stream to memory
                }

                var requestMessage = this.CreateRequestMessage(requestPipe.ReadStream);
                asyncTask = new AsyncTask(this, requestMessage, now.AddSeconds(AsyncTask.DefaultDuration));
            }
            AsyncTask.AddTask(asyncToken, asyncTask);

            StreamPipe responsePipe    = new StreamPipe();
            var        responseMessage = new ODataResponseMessage(responsePipe.WriteStream, 202); //202 Accepted

            responseMessage.PreferenceAppliedHeader().RespondAsync = true;
            ResponseWriter.WriteAsyncPendingResponse(responseMessage, asyncToken);
            return(responsePipe.ReadStream);
        }
        public Object ParseAsync(HttpResponseMessage response)
        {
            using (Stream stream = response.Content.ReadAsStreamAsync().Result)
            {
                var responseMessage = new ODataResponseMessage(stream);

                var context = new ODataDeserializerContext()
                {
                    Model = Model, Request = response.RequestMessage
                };
                using (var messageReader = new ODataMessageReader(responseMessage, _settings, Model))
                {
                    ODataResult result = GetODataResult(messageReader);
                    while (result.ODataReader.Read())
                    {
                        if (result.ODataReader.State == ODataReaderState.EntryEnd)
                        {
                            var entry               = (ODataEntry)result.ODataReader.Item;
                            var entityType          = (IEdmEntityType)Model.FindType(entry.TypeName);
                            var entityTypeReference = new EdmEntityTypeReference(entityType, false);
                            var navigationLinks     = new ODataEntryWithNavigationLinks(entry);

                            result.AddResult(_deserializer.ReadEntry(navigationLinks, entityTypeReference, context));
                        }
                    }

                    return(result.Result);
                }
            }
        }
 /// <summary>
 /// Reads the OData-Version header from the <paramref name="message"/> and parses it.
 /// If no OData-Version header is found it sets the default version to be used for reading.
 /// </summary>
 /// <param name="message">The message to get the OData-Version header from.</param>
 /// <param name="defaultVersion">The default version to use if the header was not specified.</param>
 /// <returns>
 /// The <see cref="ODataVersion"/> retrieved from the OData-Version header of the message.
 /// The default version if none is specified in the header.
 /// </returns>
 public static ODataVersion GetODataVersion(this IODataResponseMessage message, ODataVersion defaultVersion)
 {
     // translation from IODataResponseMessage to ODataMessage to pass into GetODataVersion.
     // we retain all of the data we need from the message, with a few extra data that aren't used in.
     // GetODataVersion. Not ideal, but it works.
     ODataMessage odataMessage = new ODataResponseMessage(message, false /*writing*/, false/*disableMessageStreamDisposal*/, Int64.MaxValue /*maxMessageSize*/);
     return ODataUtilsInternal.GetODataVersion(odataMessage, defaultVersion);
 }
        public void GetDataServiceVersionWorksForResponse()
        {
            InMemoryMessage simulatedRequestMessage = new InMemoryMessage();
            simulatedRequestMessage.SetHeader(ODataConstants.ODataVersionHeader, "4.0");

            IODataResponseMessage response = new ODataResponseMessage(simulatedRequestMessage, false, false, long.MaxValue);
            ODataVersion version = response.GetODataVersion(ODataVersion.V4);
            version.Should().Be(ODataUtils.StringToODataVersion(response.GetHeader(ODataConstants.ODataVersionHeader)));
        }
示例#5
0
        public void GetDataServiceVersionWorksForResponse()
        {
            InMemoryMessage simulatedRequestMessage = new InMemoryMessage();

            simulatedRequestMessage.SetHeader(ODataConstants.ODataVersionHeader, "4.0");

            IODataResponseMessage response = new ODataResponseMessage(simulatedRequestMessage, false, false, long.MaxValue);
            ODataVersion          version  = response.GetODataVersion(ODataVersion.V4);

            Assert.Equal(ODataUtils.StringToODataVersion(response.GetHeader(ODataConstants.ODataVersionHeader)), version);
        }
        public virtual Stream ProcessAsynchronously(Stream requestStream)
        {
            DateTime now = DateTime.Now;
            string asyncToken = now.Ticks.ToString(CultureInfo.InvariantCulture);

            AsyncTask asyncTask = null;
            if (requestStream == null)
            {
                asyncTask = new AsyncTask(this, this.CreateRequestMessage(null), now.AddSeconds(AsyncTask.DefaultDuration));
            }
            else
            {
                StreamPipe requestPipe = new StreamPipe();
                using (requestPipe.WriteStream)
                {
                    requestStream.CopyTo(requestPipe.WriteStream); // read the input stream to memory
                }

                var requestMessage = this.CreateRequestMessage(requestPipe.ReadStream);
                asyncTask = new AsyncTask(this, requestMessage, now.AddSeconds(AsyncTask.DefaultDuration));
            }
            AsyncTask.AddTask(asyncToken, asyncTask);

            StreamPipe responsePipe = new StreamPipe();
            var responseMessage = new ODataResponseMessage(responsePipe.WriteStream, 202); //202 Accepted
            responseMessage.PreferenceAppliedHeader().RespondAsync = true;
            ResponseWriter.WriteAsyncPendingResponse(responseMessage, asyncToken);
            return responsePipe.ReadStream;
        }
        public Object ParseAsync(HttpResponseMessage response)
        {
            using (Stream stream = response.Content.ReadAsStreamAsync().Result)
            {
                var responseMessage = new ODataResponseMessage(stream);

                var context = new ODataDeserializerContext() { Model = Model, Request = response.RequestMessage };
                using (var messageReader = new ODataMessageReader(responseMessage, _settings, Model))
                {
                    ODataResult result = GetODataResult(messageReader);
                    while (result.ODataReader.Read())
                    {
                        if (result.ODataReader.State == ODataReaderState.EntryEnd)
                        {
                            var entry = (ODataEntry)result.ODataReader.Item;
                            var entityType = (IEdmEntityType)Model.FindType(entry.TypeName);
                            var entityTypeReference = new EdmEntityTypeReference(entityType, false);
                            var navigationLinks = new ODataEntryWithNavigationLinks(entry);

                            result.AddResult(_deserializer.ReadEntry(navigationLinks, entityTypeReference, context));
                        }
                    }

                    return result.Result;
                }
            }
        }