internal async Task RunSerializeStartRequest(SerializeDataStartRequestParams serializeParams, RequestContext <SerializeDataResult> requestContext) { try { // Verify we have sensible inputs and there isn't a task running for this file already Validate.IsNotNull(nameof(serializeParams), serializeParams); Validate.IsNotNullOrWhitespaceString("FilePath", serializeParams.FilePath); DataSerializer serializer = null; if (inProgressSerializations.TryGetValue(serializeParams.FilePath, out serializer)) { // Cannot proceed as there is an in progress serialization happening throw new Exception(SR.SerializationServiceRequestInProgress(serializeParams.FilePath)); } // Create a new serializer, save for future calls if needed, and write the request out serializer = new DataSerializer(serializeParams); if (!serializeParams.IsLastBatch) { inProgressSerializations.AddOrUpdate(serializer.FilePath, serializer, (key, old) => serializer); } Logger.Write(TraceEventType.Verbose, "HandleSerializeStartRequest"); SerializeDataResult result = serializer.ProcessRequest(serializeParams); await requestContext.SendResult(result); } catch (Exception ex) { await SendErrorAndCleanup(serializeParams.FilePath, requestContext, ex); } }
internal async Task RunSerializeContinueRequest(SerializeDataContinueRequestParams serializeParams, RequestContext <SerializeDataResult> requestContext) { try { // Verify we have sensible inputs and some data has already been sent for the file Validate.IsNotNull(nameof(serializeParams), serializeParams); Validate.IsNotNullOrWhitespaceString("FilePath", serializeParams.FilePath); DataSerializer serializer = null; if (!inProgressSerializations.TryGetValue(serializeParams.FilePath, out serializer)) { throw new Exception(SR.SerializationServiceRequestNotFound(serializeParams.FilePath)); } // Write to file and cleanup if needed Logger.Write(TraceEventType.Verbose, "HandleSerializeContinueRequest"); SerializeDataResult result = serializer.ProcessRequest(serializeParams); if (serializeParams.IsLastBatch) { // Cleanup the serializer this.inProgressSerializations.TryRemove(serializer.FilePath, out serializer); } await requestContext.SendResult(result); } catch (Exception ex) { await SendErrorAndCleanup(serializeParams.FilePath, requestContext, ex); } }
public SerializeDataResult ProcessRequest(ISerializationParams serializeParams) { SerializeDataResult result = new SerializeDataResult(); try { this.WriteData(serializeParams.Rows, serializeParams.IsLastBatch); if (serializeParams.IsLastBatch) { this.CloseStreams(); } result.Succeeded = true; } catch (Exception ex) { result.Messages = ex.Message; result.Succeeded = false; this.CloseStreams(); } return(result); }