Exemplo n.º 1
0
 public void HttpGetStreamInvoke(string url, IEnumerable <Header> headers,
                                 HttpInvocationCompletionOption httpInvocationCompletionOption, TimeSpan timeOut,
                                 HttpResponseHandler httpResponseHandler, CancellationToken cancellationToken)
 {
     Task.Run(async() =>
     {
         await HttpStreamInvokeAsync(url, HttpMethod.Get, headers, null,
                                     httpInvocationCompletionOption, null, timeOut, httpResponseHandler, cancellationToken);
     }, cancellationToken);
 }
Exemplo n.º 2
0
 public void HttpPostStreamInvoke(string url, IEnumerable <Header> headers,
                                  IEnumerable <Header> contentHeaders, HttpInvocationCompletionOption httpCompletetionOption,
                                  string postParameters, TimeSpan timeOut, CancellationToken cancellationToken)
 {
     Task.Run(async() =>
     {
         await HttpStreamInvokeAsync(url, HttpMethod.Post, headers, contentHeaders,
                                     httpCompletetionOption, postParameters, timeOut, null, cancellationToken);
     }, cancellationToken);
 }
Exemplo n.º 3
0
        private async Task HttpStreamInvokeAsync(string url, HttpMethod httpMethod, IEnumerable <Header> headers,
                                                 IEnumerable <Header> contentHeaders, HttpInvocationCompletionOption httpInvocationCompletetionOption,
                                                 string postParameters, TimeSpan timeOut, HttpResponseHandler httpResponseHandler,
                                                 CancellationToken cancellationToken)
        {
            postParameters = postParameters ?? String.Empty;
            byte[] bufferPostParameters = Encoding.UTF8.GetBytes(postParameters);

            using (StreamContent streamContent = new StreamContent(new MemoryStream(bufferPostParameters)))
            {
                if (httpMethod == HttpMethod.Post)
                {
                    contentHeaders.ToList().ForEach(h => { streamContent.Headers.Add(h.Key, h.Value); });
                }

                using (HttpClient httpClient = new HttpClient())
                {
                    httpClient.Timeout = timeOut;
                    headers.ToList().ForEach(h => { httpClient.DefaultRequestHeaders.Add(h.Key, h.Value); });
                    httpClient.BaseAddress = new Uri(url);

                    var request = new HttpRequestMessage(httpMethod, url);

                    if (httpMethod == HttpMethod.Post)
                    {
                        request.Content = streamContent;
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    await httpClient.SendAsync(request, (HttpCompletionOption)httpInvocationCompletetionOption)
                    .ContinueWith(async responseTask =>
                    {
                        using (HttpResponseMessage response = responseTask.Result)
                        {
                            await response.Content.ReadAsStreamAsync().ContinueWith(streamTask =>
                            {
                                using (StreamReader streamReader = new StreamReader(streamTask.Result))
                                {
                                    List <Header> responseHeaders = new List <Header>();
                                    responseHeaders.AddRange(
                                        response.Headers.Select(c => { return(Header.CreateHeader(c.Key, c.Value)); }));
                                    List <Header> responseContentHeaders = new List <Header>();
                                    responseContentHeaders.AddRange(
                                        response.Content.Headers.Select(c => { return(Header.CreateHeader(c.Key, c.Value)); }));
                                    try
                                    {
                                        while (!streamReader.EndOfStream && !cancellationToken.IsCancellationRequested)
                                        {
                                            if (httpResponseHandler != null)
                                            {
                                                string json = streamReader.ReadLine();

                                                httpResponseHandler(this,
                                                                    new HttpInvokerResponseArgs(new HttpInvokerResponse(response.StatusCode,
                                                                                                                        response.ReasonPhrase, headers, contentHeaders, json, false)));
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Exception e = ex;
                                    }
                                    finally
                                    {
                                        if (!cancellationToken.IsCancellationRequested)
                                        {
                                            httpResponseHandler?.Invoke(this,
                                                                        new HttpInvokerResponseArgs(new HttpInvokerResponse(response.StatusCode,
                                                                                                                            response.ReasonPhrase, headers, contentHeaders, String.Empty, true)));
                                        }
                                    }
                                }
                            });
                        }
                    });
                }
            }
        }