protected override void OnReceivedContext(ReceivedContextEventArgs e)
        {
            var req = WebRequest.Create(ForwardUrl + e.Context.Request.Url.OriginalString) as HttpWebRequest;
            req.Method = e.Context.Request.Method;
            SetMessageHeader(e.Context.Request.Headers, req);
            SetMessageHeader(OverrideHeader, req);

            try
            {
                var res = req.GetResponse();
                var resStrm = res.GetResponseStream();
                var outStrm = e.Context.Response.GetOutputStream();
                outStrm.Write(resStrm);
            }
            catch (WebException ex)
            {
                var res = (HttpWebResponse)ex.Response;
                if (res != null)
                {
                    e.Context.Response.ProtocolVersion = new Version("1.1");
                    e.Context.Response.StatusCode = res.StatusCode;
                    foreach (var str in res.Headers.AllKeys)
                    {
                        e.Context.Response.Headers[str] = ex.Response.Headers[str];
                    }
                    using (var outStrm = e.Context.Response.GetOutputStream())
                    {
                        using (var inStrm = res.GetResponseStream())
                        {
                            byte[] buffer2 = new byte[1024];
                            int num2 = 0;
                            while ((num2 = inStrm.Read(buffer2, 0, buffer2.Length)) > 0)
                            {
                                outStrm.Write(buffer2, 0, num2);
                            }
                        }
                        return;
                    }
                }
                e.Context.Response.StatusCode = HttpStatusCode.BadGateway;
            }
        }
 protected virtual void OnReceivedContext(ReceivedContextEventArgs e)
 {
     if (ReceivedContext != null)
         ReceivedContext(this, e);
 }
 protected void OnPassingContext(ReceivedContextEventArgs e)
 {
     if (PassingContext != null)
         PassingContext(this, e);
 }
 public override void OnCalledService(HttpContext context)
 {
     HttpWebResponse response = null;
     try
     {
         if (context.Request.Method == "CONNECT")
             throw new IOException();
         var args = new ReceivedContextEventArgs(context);
         OnReceivedContext(args);
     }
     finally
     {
         if (response != null)
         {
             response.Close();
         }
     }
 }