/// <summary> /// Реализует выполнение работы по имитации действий пользователей. /// </summary> /// <param name="userName">Имя пользователя.</param> /// <param name="baseAdress">Адрес сервиса.</param> /// <param name="startDate">Дата добавления координат, из команды.</param> private void Work(int userName, string baseAdress, DateTime startDate) { try { UserDto user; // Используем протобуф для четных пользователей. var useProtobuf = (userName % 2) == 0; using (var client = new HttpClient()) { if (useProtobuf) { client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-protobuf")); } var createQquery = string.Format(_queryFormat, userName); client.BaseAddress = new Uri(new Uri(baseAdress), createQquery); var response = client.GetAsync(client.BaseAddress).Result; if (!response.IsSuccessStatusCode) { return; } var data = response.Content.ReadAsAsync(_returnType, new MediaTypeFormatter[] { FormatterFactory.CreateJsonFormatter(), FormatterFactory.CreateProtoBufFormatter() }).Result; user = (UserDto)data; Console.WriteLine(user); Logger.Trace(user.ToString()); } var token = AuthClient.GetToken(baseAdress, user.Name, user.Password).Result; // Случайные числа для координат. var random = new Random(user.Name); var lat = random.NextDouble(); var lng = random.NextDouble(); while (true) { var parameters = new CoordinatesDto { Date = startDate, Latitude = (decimal)((lat - random.NextDouble()) * 90), Longtitude = (decimal)((lng - random.NextDouble()) * 180), UserId = user.Id }; using (var client = new HttpClient()) { if (useProtobuf) { client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-protobuf")); } client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); client.BaseAddress = new Uri(new Uri(baseAdress), _coordsPutFormat); var response = client.PutAsync(client.BaseAddress, parameters, useProtobuf ? (MediaTypeFormatter)FormatterFactory.CreateProtoBufFormatter() : FormatterFactory.CreateJsonFormatter()).Result; if (!response.IsSuccessStatusCode) { return; } var data = response.Content.ReadAsAsync(_coordsReturnType, new MediaTypeFormatter[] { FormatterFactory.CreateJsonFormatter(), FormatterFactory.CreateProtoBufFormatter() }).Result; if ((int)data == 1) { var message = string.Format("Добавлена запись координат, пользователь {0}.", userName); #if DEBUG Console.WriteLine(message); #endif Logger.Trace(message); } } Thread.Sleep(1000); } } catch (ThreadAbortException) {} catch (AggregateException ex) { Console.WriteLine(ex.InnerException.Message); Logger.Error("Ошибка имитации.", ex.InnerException); } catch (Exception ex) { Console.WriteLine(ex.Message); Logger.Error("Ошибка имитации.", ex); } }
/// <summary> /// Реализует запрос к сервису. /// </summary> /// <param name="baseAdress">Базовый адрес..</param> /// <returns>Возвращает ответ сервиса.</returns> public virtual string[] ProcessRequest(string baseAdress) { try { var query = string.Format(_queryFormat, _commandArguments); using (var client = new HttpClient()) { client.BaseAddress = new Uri(new Uri(baseAdress), query); if (!string.IsNullOrEmpty(_token)) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token); } Task <HttpResponseMessage> response; switch (_method) { case RequestMethod.GET: { response = client.GetAsync(client.BaseAddress); break; } case RequestMethod.POST: { response = client.PostAsync(client.BaseAddress, _bodyParameters, FormatterFactory.CreateJsonFormatter()); break; } case RequestMethod.PUT: { response = client.PutAsync(client.BaseAddress, _bodyParameters, FormatterFactory.CreateJsonFormatter()); break; } case RequestMethod.DELETE: { response = client.DeleteAsync(client.BaseAddress); break; } default: { throw new NotImplementedException("Не реализована обработка типа: " + _method); } } var resp = response.Result; if (resp.IsSuccessStatusCode) { var data = resp.Content.ReadAsAsync(_returnType, new[] { FormatterFactory.CreateJsonFormatter() }).Result; return(this.ReturnTypeToString(data)); } return(new[] { "Запрос вернул код: " + resp.StatusCode }); } } catch (AggregateException ex) { Console.WriteLine(string.Format("Ошибка выполнения команды {0}: {1}", this._verb, ex.InnerException.Message)); Logger.Error("Ошибка выполнения команды.", ex.InnerException); } return(new string[] { }); }