private void SaveExecutionRequestData(AsyncExecutionRequest request) { string requestHash = request.GetRequestHash(); AsyncExecutionData executionData = AsyncCallbackRepository.OneAsyncExecutionDataWhere(c => c.RequestHash == requestHash); if (executionData == null) { executionData = new AsyncExecutionData { RequestCuid = request.Cuid, RequestHash = requestHash, Requested = new Instant(DateTime.UtcNow) }; AsyncCallbackRepository.Save(executionData); } else { Logger.Warning("AsyncExecutionData was already persisted: Request.Cuid={0}, RequestHash={1}", executionData.RequestCuid, requestHash); } SaveRequestData(request, requestHash); }
public void InvokeAsync(AsyncExecutionRequest request, Action <AsyncExecutionResponse> responseHandler = null) { responseHandler = responseHandler ?? DefaultResponseHandler; if (!request.UseCachedResponse) { CallExecuteRemoteAsync(request, responseHandler); } else { AsyncExecutionResponseData response = CallbackService.GetCachedResponse(request.GetRequestHash()); if (response != null && new Instant(DateTime.UtcNow).DiffInMinutes(response.Created.Value) <= request.ResponseMaxAgeInMinutes) { AsyncExecutionResponse result = response.CopyAs <AsyncExecutionResponse>(); result.Success = true; result.Request = request; result.ResultJson = response.ResultJson; responseHandler(result); } else { if (response != null) { CallbackService.AsyncCallbackRepository.Delete(response); } CallExecuteRemoteAsync(request, responseHandler); } } }