public async Task<SynchronizationReport> PushChangesAsync(CancellationToken token) { token.Register(() => { });//request.Abort() TODO: check this token.ThrowIfCancellationRequested(); if (sourceStream.CanRead == false) throw new Exception("Stream does not support reading"); var commands = (IAsyncFilesCommandsImpl)this.destination.Commands; var baseUrl = commands.UrlFor(); var credentials = commands.PrimaryCredentials; var conventions = commands.Conventions; request = commands.RequestFactory.CreateHttpJsonRequest( new CreateHttpJsonRequestParams(this, baseUrl + "/synchronization/MultipartProceed", "POST", credentials, conventions)); // REVIEW: (Oren) There is a mismatch of expectations in the AddHeaders. ETag must always have to be surrounded by quotes. // If AddHeader/s ever put an etag it should check for that. // I was hesitant to do the change though, because I do not understand the complete scope of such a change. request.AddHeaders(sourceMetadata); request.AddHeader("Content-Type", "multipart/form-data; boundary=" + syncingBoundary); request.AddHeader(SyncingMultipartConstants.FileName, fileName); request.AddHeader(SyncingMultipartConstants.SourceServerInfo, serverInfo.AsJson()); try { await request.WriteAsync(PrepareMultipartContent(token)); var response = await request.ReadResponseJsonAsync(); return new JsonSerializer().Deserialize<SynchronizationReport>(new RavenJTokenReader(response)); } catch (Exception exception) { if (token.IsCancellationRequested) { throw new OperationCanceledException(token); } var webException = exception as ErrorResponseException; if (webException != null) { webException.SimplifyException(); } throw; } }
public async Task<SynchronizationReport> PushChangesAsync(CancellationToken token) { token.Register(() => { });//request.Abort() TODO: check this token.ThrowIfCancellationRequested(); if (sourceStream.CanRead == false) { throw new Exception("Stream does not support reading"); } request = destination.JsonRequestFactory.CreateHttpJsonRequest(new CreateHttpJsonRequestParams(this, destination.FileSystemUrl + "/synchronization/MultipartProceed", "POST", destination.Credentials, destination.Convention)); //request.SendChunked = true; //request.AllowWriteStreamBuffering = false; //request.KeepAlive = true; request.AddHeaders(sourceMetadata); request.AddHeader("Content-Type", "multipart/form-data; boundary=" + syncingBoundary); request.AddHeader(SyncingMultipartConstants.FileName, fileName); request.AddHeader(SyncingMultipartConstants.SourceServerInfo, serverInfo.AsJson()); try { await request.WriteAsync(PrepareMultipartContent(token)); var response = await request.ReadResponseJsonAsync(); return new JsonSerializer().Deserialize<SynchronizationReport>(new RavenJTokenReader(response)); } catch (Exception exception) { if (token.IsCancellationRequested) { throw new OperationCanceledException(token); } var webException = exception as ErrorResponseException; if (webException != null) { webException.BetterWebExceptionError(); } throw; } }
internal static void AddEtagHeader(HttpJsonRequest request, Etag etag) { if (etag != null) { request.AddHeader("If-None-Match", "\"" + etag + "\""); } }