private async Task <AntCloudClientResponse> SendRequest(AntCloudClientRequest request) { var retried = 0; var parameters = request.GetParameters(); var message = BuildRequest(_endpoint, parameters); while (true) { RequestSending?.Invoke(this, parameters); var response = await _httpClient.SendAsync(message); var responseString = await response.Content.ReadAsStringAsync(); ResponseRead?.Invoke(this, responseString); JObject wholeJson; try { wholeJson = JObject.Parse(responseString); } catch (JsonReaderException e) { if (_enableAutoRetry && retried < _autoRetryLimit) { retried += 1; continue; } throw new ClientException(SDKConstants.ResultCodes.RESPONSE_FORMAT_ERROR, e.Message); } if (wholeJson == null) { throw new ClientException(SDKConstants.ResultCodes.TRANSPORT_ERROR, "Unexpected gateway response: " + responseString); } var responseNode = wholeJson["response"] as JObject; if (responseNode == null) { throw new ClientException(SDKConstants.ResultCodes.TRANSPORT_ERROR, "Unexpected gateway response: " + responseString); } var result = AntCloudClientResponse.Create(responseNode); if (result.IsSuccess && _checkSign) { var sign = wholeJson.Value <string>(SDKConstants.ParamKeys.SIGN); var target = ExtractStringToSign(responseString); var calculatedSign = ComputeSign(target, request.GetParameter(SDKConstants.ParamKeys.SIGN_TYPE), _accessSecret, SDKConstants.SIGN_CHARSET); if (!calculatedSign.Equals(sign)) { throw new ClientException(SDKConstants.ResultCodes.BAD_SIGNATURE, "Invalid signature in response"); } } return(result); } }
/// <summary> /// Raises the <see cref="RequestSending"/> event. Note, sender is null. /// </summary> /// <param name="inUri"></param> internal static void onRequestSending(Uri inUri) { // Written, 24.11.2019 onSendingStopWatch.Restart(); Console.WriteLine("Requesting from the URL, {0}", inUri.AbsoluteUri.Replace(ApplicationInfomation.API_KEY, "<api_key>")); RequestSending?.Invoke(null, new RequestSendingEventArgs(inUri)); }
public async Task <TResponse> SendRequest(TRequest request) { var sw = new Stopwatch(); sw.Start(); var sessionId = Guid.NewGuid().ToString("N"); var message = Helpers.CreateMessage(request); message.ReplyTo = receiveResponseQueueName; message.ReplyToSessionId = sessionId; var sessionClient = new SessionClient(connectionStr, receiveResponseQueueName); var messageSession = await sessionClient.AcceptMessageSessionAsync(sessionId); var receiveTask = messageSession.ReceiveAsync(TimeSpan.FromSeconds(20)); // SEND! RequestSending?.Invoke(request, message); await client.SendAsync(message); // RECEIVE! var responseMsg = await receiveTask; await messageSession.CloseAsync(); sw.Stop(); AverageRTTms = (AverageRTTms * sendCount + sw.ElapsedMilliseconds) / (++sendCount); if (sw.ElapsedMilliseconds < MinRTTms || MinRTTms == 0) { MinRTTms = sw.ElapsedMilliseconds; } if (sw.ElapsedMilliseconds > MaxRTTms) { MaxRTTms = sw.ElapsedMilliseconds; } return(Helpers.DecodeMessage <TResponse>(responseMsg)); }
public virtual void OnRequestSending(WebEventArgs e) { RequestSending?.Invoke(e.Context, e); }
protected virtual void OnRequestSending(RequestSendingEventArgs @event) { RequestSending?.Invoke(this, @event); }