Для длинных запросов на опрос вы должны создать отдельный

аюсь создать слой для веб-сервиса, используя HttpClient в моемXamarin.Forms мобильное приложение.

без синглтонс одноцветным рисунком

впервый Подход Я создаю новый объект http-клиента в каждом новом запросе, сделанном мобильным приложением.

вот мой код

  public HttpClient GetConnection()
        {

            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri(baseAddress); 
            httpClient.Timeout = System.TimeSpan.FromMilliseconds(timeout);


            return httpClient;

        }

почтовый код запроса

 public async Task<TResult> PostAsync<TRequest, TResult>(String url, TRequest requestData)
        {
            HttpClient client = GetConnection();
            String responseData = null;
            if (client != null)
            {

                String serializedObject = await Task.Run(() => JsonConvert.SerializeObject(requestData, _jsonSerializerSettings));
                var jsonContent = new StringContent(serializedObject, System.Text.Encoding.UTF8, "application/json");
                HttpResponseMessage response = await client.PostAsync(new Uri(url, UriKind.Relative), jsonContent);
                responseData = await HandleResponse(response);


                return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _jsonSerializerSettings));


            }
            else
            {

                throw new NullReferenceException("NullReferenceException @ PostAsync  httpclient is null WebRequest.cs");

            }

        }

клиент будет использовать следующий код для выполнения запроса

new LoginService(new WebRequest()).UserLogin(userRequest);

внутри класса, который реализуетIWebRequest

_webRequest.PostAsync<UserRequest,bool>(Constants.USER_LOGIN, userRequest);

ввторой Подход Я использую один и тот же объект http-клиента в каждом новом запросе, мой синглтон-класс также является потокобезопасным.

private static readonly Lazy<HttpService> lazy =
        new Lazy<HttpService>(() => new HttpService());

        public static HttpService Instance { get { return lazy.Value; } }



        private HttpClient getConnection()
        {

            client = new HttpClient();
            client.Timeout = System.TimeSpan.FromMilliseconds(timeout);

            //client.MaxResponseContentBufferSize = 500000;
            client.BaseAddress = new Uri(baseAddress);
            return client;
        }

почтовый код запроса

public Task<HttpResponseMessage> sendData(String url,String jsonData)
        {

            var jsonContent = new StringContent(jsonData, System.Text.Encoding.UTF8, "application/json");

            return getConnection().PostAsync(new Uri(url, UriKind.Relative), jsonContent);
        }

клиент будет использовать следующий код для выполнения

HttpService.Instance.sendData(...)

я прошел через много библиотек, какRestSharp через Интернет, чтобы изучить лучшие, и я обнаружил, что большинство из них создают новые объекты по запросу. поэтому я запутался, какой шаблон подходит лучше всего.

Ответы на вопрос(3)

Ваш ответ на вопрос