Пример #1
0
        private void Send(string method, string url, string body, string contentType, IEnumerable <KeyValuePair <string, string> > headers,
                          Action <HttpResponse> onSuccess, Action <Exception> onException)
        {
            var request = new HttpRequestMessage();

            request.Method     = new System.Net.Http.HttpMethod(method);
            request.RequestUri = new Uri(url);

            var bodyBytes = Helper.UTF8NoBom.GetBytes(body);
            var stream    = new MemoryStream(bodyBytes);
            var content   = new StreamContent(stream);

            content.Headers.ContentType   = new MediaTypeHeaderValue(contentType);
            content.Headers.ContentLength = bodyBytes.Length;

            request.Content = content;

            if (headers != null)
            {
                foreach (var header in headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }
            }

            var state = new ClientOperationState(request, onSuccess, onException);

            _client.SendAsync(request).ContinueWith(RequestSent(state));
        }
Пример #2
0
        private void Send(string method, string url, string body, string contentType,
                          IEnumerable <KeyValuePair <string, string> > headers, TimeSpan timeout,
                          Action <HttpResponse> onSuccess, Action <Exception> onException)
        {
            var request   = (HttpWebRequest)WebRequest.Create(url);
            var bodyBytes = Helper.UTF8NoBom.GetBytes(body);

            request.Method        = method;
            request.KeepAlive     = true;
            request.Pipelined     = true;
            request.ContentLength = bodyBytes.Length;
            request.ContentType   = contentType;

            if (headers != null)
            {
                foreach (var header in headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }
            }

            var state = new ClientOperationState(request, onSuccess, onException)
            {
                InputStream = new MemoryStream(bodyBytes)
            };
            var result = request.BeginGetRequestStream(GotRequestStream, state);

            ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, TimeoutCallback, request,
                                                   (int)timeout.TotalMilliseconds, true);
        }
Пример #3
0
		private Action<Task<string>> ResponseRead(ClientOperationState state) {
			return task => {
				try {
					state.Response.Body = task.Result;
					state.Dispose();
					state.OnSuccess(state.Response);
				} catch (Exception ex) {
					state.Dispose();
					state.OnError(ex);
				}
			};
		}
Пример #4
0
		private Action<Task<HttpResponseMessage>> RequestSent(ClientOperationState state) {
			return task => {
				try {
					var responseMsg = task.Result;
					state.Response = new HttpResponse(responseMsg);
					responseMsg.Content.ReadAsStringAsync()
						.ContinueWith(ResponseRead(state));
				} catch (Exception ex) {
					state.Dispose();
					state.OnError(ex);
				}
			};
		}
Пример #5
0
		private void Receive(string method, string url, IEnumerable<KeyValuePair<string, string>> headers,
			Action<HttpResponse> onSuccess, Action<Exception> onException) {
			var request = new HttpRequestMessage();
			request.Method = new System.Net.Http.HttpMethod(method);
			request.RequestUri = new Uri(url);

			if (headers != null) {
				foreach (var header in headers) {
					request.Headers.Add(header.Key, header.Value);
				}
			}

			var state = new ClientOperationState(request, onSuccess, onException);
			_client.SendAsync(request).ContinueWith(RequestSent(state));
		}
Пример #6
0
        private void Send(string method, string url, string body, string contentType, Action <HttpResponse> onSuccess, Action <Exception> onException)
        {
            var request   = (HttpWebRequest)WebRequest.Create(url);
            var bodyBytes = Encoding.UTF8.GetBytes(body);

            request.Method        = method;
            request.KeepAlive     = false;//TODO TR : hangs on mono
            request.Pipelined     = false;
            request.ContentLength = bodyBytes.Length;
            request.ContentType   = contentType;

            var state = new ClientOperationState(request, onSuccess, onException)
            {
                InputStream = new MemoryStream(bodyBytes)
            };

            request.BeginGetRequestStream(GotRequestStream, state);
        }
Пример #7
0
        public void Post(string url, string body, string contentType, Action<HttpResponse> onSuccess, Action<Exception> onException)
        {
            Ensure.NotNull(url, "url");
            Ensure.NotNull(body, "body");
            Ensure.NotNull(contentType, "contentType");
            Ensure.NotNull(onSuccess, "onSuccess");
            Ensure.NotNull(onException, "onException");

            var request = (HttpWebRequest)WebRequest.Create(url);
            var bodyBytes = Encoding.UTF8.GetBytes(body);

            request.Method = HttpMethod.Post;
            request.KeepAlive = false;//TODO TR : hangs on mono
            request.Pipelined = false;
            request.ContentLength = bodyBytes.Length;
            request.ContentType = contentType;

            var state = new ClientOperationState(request, onSuccess, onException)
                            {
                                InputStream = new MemoryStream(bodyBytes)
                            };
            request.BeginGetRequestStream(GotRequestStream, state);
        }
Пример #8
0
        public void Post(string url, string body, string contentType, Action <HttpResponse> onSuccess, Action <Exception> onException)
        {
            Ensure.NotNull(url, "url");
            Ensure.NotNull(body, "body");
            Ensure.NotNull(contentType, "contentType");
            Ensure.NotNull(onSuccess, "onSuccess");
            Ensure.NotNull(onException, "onException");

            var request   = (HttpWebRequest)WebRequest.Create(url);
            var bodyBytes = Encoding.UTF8.GetBytes(body);

            request.Method        = HttpMethod.Post;
            request.KeepAlive     = false;//TODO TR : hangs on mono
            request.Pipelined     = false;
            request.ContentLength = bodyBytes.Length;
            request.ContentType   = contentType;

            var state = new ClientOperationState(request, onSuccess, onException)
            {
                InputStream = new MemoryStream(bodyBytes)
            };

            request.BeginGetRequestStream(GotRequestStream, state);
        }
        private void Send(string method, string url, string body, string contentType, 
                          IEnumerable<KeyValuePair<string, string>> headers, TimeSpan timeout,
                          Action<HttpResponse> onSuccess, Action<Exception> onException)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);
            var bodyBytes = Helper.UTF8NoBom.GetBytes(body);
            request.Method = method;
            request.KeepAlive = true;
            request.Pipelined = true;
            request.ContentLength = bodyBytes.Length;
            request.ContentType = contentType;

            if (headers != null)
            {
                foreach (var header in headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }
            }

            var state = new ClientOperationState(request, onSuccess, onException)
            {
                InputStream = new MemoryStream(bodyBytes)
            };
            var result = request.BeginGetRequestStream(GotRequestStream, state);
            ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, TimeoutCallback, request,
                           (int)timeout.TotalMilliseconds, true);

        }
Пример #10
0
        private void Send(string method, string url, string body, string contentType, IEnumerable<KeyValuePair<string, string>> headers, 
                             Action<HttpResponse> onSuccess, Action<Exception> onException)
        {
            var request = new HttpRequestMessage();
            request.Method = new System.Net.Http.HttpMethod(method);
            request.RequestUri = new Uri(url);

            var bodyBytes = Helper.UTF8NoBom.GetBytes(body);
            var stream = new MemoryStream(bodyBytes);
            var content = new StreamContent(stream);
            content.Headers.ContentType = new MediaTypeHeaderValue(contentType);
            content.Headers.ContentLength = bodyBytes.Length;

            request.Content = content;

            if(headers != null)
            {
                foreach (var header in headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }
            }

            var state = new ClientOperationState(request, onSuccess, onException);
            _client.SendAsync(request).ContinueWith(RequestSent(state));
        }
Пример #11
0
        private void Receive(string method, string url, IEnumerable<KeyValuePair<string, string>> headers,
                             Action<HttpResponse> onSuccess, Action<Exception> onException)
        {
            var request = new HttpRequestMessage();
#if __MonoCS__
            request.Headers.Add("Keep-alive", "false");
#endif
            request.Method = new System.Net.Http.HttpMethod(method);
            request.RequestUri = new Uri(url);

            if(headers != null)
            {
                foreach(var header in headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }
            }

            var state = new ClientOperationState(request, onSuccess, onException);
            _client.SendAsync(request).ContinueWith(RequestSent(state));
        }
Пример #12
0
 private Action<Task<string>> ResponseRead(ClientOperationState state) 
 {
     return task => {
         try 
         {
             state.Response.Body = task.Result;
             state.Dispose();
             state.OnSuccess(state.Response);
         }
         catch(Exception ex)
         {
             state.Dispose();
             state.OnError(ex);
         }
     };
 }
Пример #13
0
 private Action<Task<HttpResponseMessage>> RequestSent(ClientOperationState state)
 {
     return task =>
     {
         try
         {
             var responseMsg = task.Result;
             state.Response = new HttpResponse(responseMsg);
             responseMsg.Content.ReadAsStringAsync()
                     .ContinueWith(ResponseRead(state));
         }
         catch (Exception ex)
         {
             state.Dispose();
             state.OnError(ex);
         }
     };
 }
        private void Send(string method, string url, string body, string contentType, Action<HttpResponse> onSuccess, Action<Exception> onException)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);
            var bodyBytes = Encoding.UTF8.GetBytes(body);

            request.Method = method;
            request.KeepAlive = true;
            request.Pipelined = true;
            request.ContentLength = bodyBytes.Length;
            request.ContentType = contentType;

            var state = new ClientOperationState(request, onSuccess, onException)
            {
                InputStream = new MemoryStream(bodyBytes)
            };
            request.BeginGetRequestStream(GotRequestStream, state);
        }