Example #1
0
        static public async Task<Response> Send_OTHERS(this Request request, Action<long[]> onProgress = null)
        {
            Response response = null;
            try
            {
#if NET45
				var req= (HttpWebRequest)WebRequest.Create(request.Uri);
#else
				var req= new HttpWebRequest(request.Uri);
#endif

                req.Method = request.Method;
                req.AddHeaders(request.Headers);
                if (request.Content != null && request.Content.Length > 0)
                {
					var reqStream = Task.Factory.FromAsync<Stream>(req.BeginGetRequestStream, req.EndGetRequestStream, null).Result;
					request.Content.CopyTo(reqStream);
                    reqStream.Flush();
                }

				//var res = (HttpWebResponse) await Task.Factory.FromAsync<WebResponse>(req.BeginGetResponse, req.EndGetResponse, null);
				// weird problems with some datasoures, replace the above line for the following; this should not block UI cause the public interfaces
				// are async
				var wr = Task.Factory.FromAsync<WebResponse>(req.BeginGetResponse, req.EndGetResponse, null).Result;
				var res = (HttpWebResponse) wr;

				var resStream = default(Stream);
                if (res.ContentLength > 0)
                {
                    resStream = res.GetResponseStream();
                }
                
                response = await Response.Create(res.StatusCode, resStream);
                foreach (var name in res.Headers.AllKeys)
                {
                    response.Headers.Add(name, res.Headers[name]);
                }
                return response;
            }
            catch (Exception e)
            {
                throw e;
            }
        }