public IEnumerable <TOut> ExecuteQuery <TOut>(string cypherQuery) { var request = CypherQueryRequest.Create(cypherQuery); var srequest = _serializer.Serialize(request); Logger.Current.Log("Executing: " + srequest, LogLevel.Info); var responseTask = _webClient.PostAsync(_transactionUri, srequest); responseTask.Wait(); var readTask = responseTask.Result.Content.ReadAsStringAsync(); readTask.Wait(); var response = readTask.Result; Logger.Current.Log("Response: " + response, LogLevel.Info); var cypherResponse = _serializer.Deserialize <CypherResponse <TOut> >(response); if (cypherResponse.Errors.Any()) { throw new CypherResponseException(cypherResponse.Errors.Select(e => e.Message).ToArray()); } if (!_isInitialized) { _transactionUri = cypherResponse.Commit.Substring(0, cypherResponse.Commit.Length - ("/commit").Length); _isInitialized = true; } return(cypherResponse.Results ?? Enumerable.Empty <TOut>()); }
public static Result <UnityWebRequest, WebError> CreateRequest(string url, IWebAction action, WebActionData actionData, IWebSerializer serializer) { if (action.Method == WebMethod.POST) { object[] values = actionData.values; var form = new Dictionary <string, object>(); for (int i = 0; i < values.Length; i++) { form.Add(action.ParamNames[i], values[i]); } return(serializer.Serialize(form).Select(postData => { var request = UnityWebRequest.Post(url, postData); serializer.OnBeforeRequest(request); return request; })); } else { var request = UnityWebRequest.Get(url); serializer.OnBeforeRequest(request); return(request); } }
public IEnumerable <TOut> ExecuteQuery <TOut>(string cypherQuery) { var request = CypherQueryRequest.Create(cypherQuery); var srequest = _serializer.Serialize(request); Logger.Current.Log("Executing: " + srequest, LogLevel.Info); var responseTask = _webClient.PostAsync(_baseUri, srequest); var response = responseTask.Result.Content.ReadAsStringAsync().Result; Logger.Current.Log("Response: " + response, LogLevel.Info); var cypherResponse = _serializer.Deserialize <CypherResponse <TOut> >(response); if (cypherResponse.Errors.Any()) { throw new CypherResponseException(cypherResponse.Errors); } return(cypherResponse.Results); }
public IEnumerable <TOut> ExecuteQuery <TOut>(string cypherQuery) { var request = CypherQueryRequest.Create(cypherQuery); var srequest = _serializer.Serialize(request); Logger.Current.Log("Executing: " + srequest, LogLevel.Info); var responseTask = _webClient.PostAsync(_baseUri, _username, _password, srequest); responseTask.Wait(); var readTask = responseTask.Result.Content.ReadAsStringAsync(); readTask.Wait(); var response = readTask.Result; Logger.Current.Log("Response: " + response, LogLevel.Info); var cypherResponse = _serializer.Deserialize <CypherResponse <TOut> >(response); if (cypherResponse.Errors.Any()) { throw new CypherResponseException(cypherResponse.Errors.Select(e => e.Message).ToArray()); } return(cypherResponse.Results ?? Enumerable.Empty <TOut>()); }
/// <summary> /// Serializes and sends table data back to the client /// </summary> /// <param name="context"></param> private void SendTableData(HttpContext context, string language, string db, string[] tablePath, ResponseBucket cacheResponse) { //// TODO: Limit data size? //string data = ""; //using (var stream = new StreamReader(context.Request.InputStream)) //{ // data = stream.ReadToEnd(); //} var tableQuery = JsonHelper.Deserialize <TableQuery>(cacheResponse.PostData) as TableQuery; if (tableQuery.Response == null || tableQuery.Response.Format == null) { tableQuery.Response = new QueryResponse() { Format = _defaultResponseFormat }; } // Initialize the builder PCAxis.Paxiom.IPXModelBuilder builder = GetPXBuilder(language, db, tablePath); builder.DoNotApplyCurrentValueSet = true; // DoNotApplyCurrentValueSet means the "client that made the request" is an api(, not a GUI) so that // CNMM2.4 property DefaultInGUI (for Valueset/grouping) should not be used builder.SetPreferredLanguage(language); builder.BuildForSelection(); // Process selections List <PCAxis.Paxiom.Selection> selections; try { selections = PCAxisRepository.BuildSelections(builder, tableQuery); } catch (Exception ex) { var message = ex is HttpException ? ex.Message : "Parameter error"; cacheResponse.ResponseData = context.Response.ContentEncoding.GetBytes(Error(message, false)); context.SendJSONError(cacheResponse, 400, true); // Logs usage _usageLogger.Info(String.Format("url={0}, type=error, caller={1}, cached=false, message=Parameter error", context.Request.RawUrl, context.Request.UserHostAddress)); return; } // Check that the number of selected cells do not exceed the limit long cellCount = 1; foreach (var sel in selections) { if (sel.ValueCodes.Count > 0) { cellCount *= sel.ValueCodes.Count; } } if (cellCount > Settings.Current.FetchCellLimit) { Write403Response(context); return; } builder.BuildForPresentation(selections.ToArray()); // Output handling starts here context.Response.Clear(); IWebSerializer serializer = WebSerializerSwitch.GetSerializer(tableQuery.Response.Format); //serializer.Serialize(builder.Model, context.Response); serializer.Serialize(builder.Model, cacheResponse); //context.Response.AddHeader("Content-Type", cacheResponse.ContentType); //context.Response.OutputStream.Write(cacheResponse.ResponseData, 0, cacheResponse.ResponseData.Length); context.Send(cacheResponse, true); //Logs usage _usageLogger.Info(String.Format("url={0}, type=data, caller={3}, cached=false, format={1}, matrix-size={2}", context.Request.RawUrl, tableQuery.Response.Format, builder.Model.Data.MatrixSize, context.Request.UserHostAddress)); }