/// <summary> /// Executes the ChangeSet. /// </summary> /// <param name="batchReader">The batch reader.</param> /// <param name="batchId">The batch id.</param> /// <param name="originalRequest">The original request containing all the batch requests.</param> /// <param name="cancellationToken">The token to monitor for cancellation requests.</param> /// <returns>The response for the ChangeSet.</returns> public virtual async Task <ODataBatchResponseItem> ExecuteChangeSetAsync(ODataBatchReader batchReader, Guid batchId, HttpRequestMessage originalRequest, CancellationToken cancellationToken) { if (batchReader == null) { throw Error.ArgumentNull("batchReader"); } if (originalRequest == null) { throw Error.ArgumentNull("originalRequest"); } Guid changeSetId = Guid.NewGuid(); List <HttpResponseMessage> changeSetResponse = new List <HttpResponseMessage>(); Dictionary <string, string> contentIdToLocationMapping = new Dictionary <string, string>(); try { while (batchReader.Read() && batchReader.State != ODataBatchReaderState.ChangesetEnd) { if (batchReader.State == ODataBatchReaderState.Operation) { HttpRequestMessage changeSetOperationRequest = await batchReader.ReadChangeSetOperationRequestAsync(batchId, changeSetId, bufferContentStream : false); changeSetOperationRequest.CopyBatchRequestProperties(originalRequest); changeSetOperationRequest.DeleteRequestContainer(false); try { HttpResponseMessage response = await ODataBatchRequestItem.SendMessageAsync(Invoker, changeSetOperationRequest, cancellationToken, contentIdToLocationMapping); if (response.IsSuccessStatusCode) { changeSetResponse.Add(response); } else { ChangeSetRequestItem.DisposeResponses(changeSetResponse); changeSetResponse.Clear(); changeSetResponse.Add(response); return(new ChangeSetResponseItem(changeSetResponse)); } } finally { originalRequest.RegisterForDispose(changeSetOperationRequest.GetResourcesForDisposal()); originalRequest.RegisterForDispose(changeSetOperationRequest); } } } } catch { ChangeSetRequestItem.DisposeResponses(changeSetResponse); throw; } return(new ChangeSetResponseItem(changeSetResponse)); }
/// <summary> /// Executes the ChangeSet. /// </summary> /// <param name="batchReader">The batch reader.</param> /// <param name="batchId">The batch id.</param> /// <param name="originalRequest">The original request containing all the batch requests.</param> /// <param name="handler">The handler for processing a message.</param> /// <returns>The response for the ChangeSet.</returns> public virtual async Task <ODataBatchResponseItem> ExecuteChangeSetAsync(ODataBatchReader batchReader, Guid batchId, HttpRequest originalRequest, RequestDelegate handler) { if (batchReader == null) { throw new ArgumentNullException(nameof(batchReader)); } if (originalRequest == null) { throw new ArgumentNullException(nameof(originalRequest)); } if (handler == null) { throw new ArgumentNullException(nameof(handler)); } Guid changeSetId = Guid.NewGuid(); List <HttpContext> changeSetResponse = new List <HttpContext>(); Dictionary <string, string> contentIdToLocationMapping = new Dictionary <string, string>(); while (await batchReader.ReadAsync().ConfigureAwait(false) && batchReader.State != ODataBatchReaderState.ChangesetEnd) { if (batchReader.State == ODataBatchReaderState.Operation) { CancellationToken cancellationToken = originalRequest.HttpContext.RequestAborted; HttpContext changeSetOperationContext = await batchReader.ReadChangeSetOperationRequestAsync(originalRequest.HttpContext, batchId, changeSetId, cancellationToken).ConfigureAwait(false); changeSetOperationContext.Request.CopyBatchRequestProperties(originalRequest); //changeSetOperationContext.Request.DeleteRequestContainer(false); await ODataBatchRequestItem.SendRequestAsync(handler, changeSetOperationContext, contentIdToLocationMapping).ConfigureAwait(false); if (changeSetOperationContext.Response.IsSuccessStatusCode()) { changeSetResponse.Add(changeSetOperationContext); } else { changeSetResponse.Clear(); changeSetResponse.Add(changeSetOperationContext); return(new ChangeSetResponseItem(changeSetResponse)); } } } return(new ChangeSetResponseItem(changeSetResponse)); }
/// <summary> /// Executes the ChangeSet. /// </summary> /// <param name="batchReader">The batch reader.</param> /// <param name="batchId">The batch id.</param> /// <param name="originalRequest">The original request containing all the batch requests.</param> /// <param name="cancellationToken">The token to monitor for cancellation requests.</param> /// <returns>The response for the ChangeSet.</returns> public virtual async Task<ODataBatchResponseItem> ExecuteChangeSetAsync(ODataBatchReader batchReader, Guid batchId, HttpRequestMessage originalRequest, CancellationToken cancellationToken) { if (batchReader == null) { throw Error.ArgumentNull("batchReader"); } if (originalRequest == null) { throw Error.ArgumentNull("originalRequest"); } Guid changeSetId = Guid.NewGuid(); List<HttpResponseMessage> changeSetResponse = new List<HttpResponseMessage>(); Dictionary<string, string> contentIdToLocationMapping = new Dictionary<string, string>(); try { while (batchReader.Read() && batchReader.State != ODataBatchReaderState.ChangesetEnd) { if (batchReader.State == ODataBatchReaderState.Operation) { HttpRequestMessage changeSetOperationRequest = await batchReader.ReadChangeSetOperationRequestAsync(batchId, changeSetId, bufferContentStream: false); changeSetOperationRequest.CopyBatchRequestProperties(originalRequest); try { HttpResponseMessage response = await ODataBatchRequestItem.SendMessageAsync(Invoker, changeSetOperationRequest, cancellationToken, contentIdToLocationMapping); if (response.IsSuccessStatusCode) { changeSetResponse.Add(response); } else { ChangeSetRequestItem.DisposeResponses(changeSetResponse); changeSetResponse.Clear(); changeSetResponse.Add(response); return new ChangeSetResponseItem(changeSetResponse); } } finally { originalRequest.RegisterForDispose(changeSetOperationRequest.GetResourcesForDisposal()); originalRequest.RegisterForDispose(changeSetOperationRequest); } } } } catch { ChangeSetRequestItem.DisposeResponses(changeSetResponse); throw; } return new ChangeSetResponseItem(changeSetResponse); }
/// <summary> /// Reads an Operation request in a ChangeSet. /// </summary> /// <param name="reader">The <see cref="ODataBatchReader"/>.</param> /// <param name="batchId">The Batch ID.</param> /// <param name="changeSetId">The ChangeSet ID.</param> /// <param name="bufferContentStream">if set to <c>true</c> then the request content stream will be buffered.</param> /// <returns>A <see cref="HttpRequestMessage"/> representing a ChangeSet operation</returns> public static Task <HttpRequestMessage> ReadChangeSetOperationRequestAsync(this ODataBatchReader reader, Guid batchId, Guid changeSetId, bool bufferContentStream) { return(reader.ReadChangeSetOperationRequestAsync(batchId, changeSetId, bufferContentStream, CancellationToken.None)); }