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))); }
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; } } }