programtically getting an aspx page using httphandlers, httpwebrequest and httpwebresponse

Nov 7 2008 9:31 AM

Hi !!

I am trying to route all requests to my server to another server using HttpWebRequest and HttpWebResponse classes and HttpPHandlers. When i am requesting a page using this code i am able to sucessfully redirect the html, and css requests.. Sowever it fails for some requests to images.

i am pasting the code ..

public class CommunicationHandler : IHttpHandler

{

public CommunicationHandler()

{

//

// TODO: Add constructor logic here

//

}

#region Implementation of IHttpHandler

public void ProcessRequest(System.Web.HttpContext context)

{

HttpContext.Current.Response.Clear();

HttpWebRequest myReq;

// HttpContext.Current.Request.Path

if (!HttpContext.Current.Request.Url.PathAndQuery.Contains("ClientMIS"))

{

myReq = (HttpWebRequest)WebRequest.Create("http://localhost/ClientMIS" + HttpContext.Current.Request.Url.PathAndQuery);

}

else

{

myReq = (HttpWebRequest)WebRequest.Create("http://localhost" + HttpContext.Current.Request.Url.PathAndQuery);

}

try

{

WebResponse responseObj = myReq.GetResponse();

HttpContext.Current.Response.ContentType = responseObj.ContentType;

if (!responseObj.ContentType.ToUpper().Contains("image".ToUpper()))

{

StreamReader srObjResponse = new

StreamReader (responseObj.GetResponseStream());

HttpContext.Current.Response.Write(srObjResponse.ReadToEnd());

}

else

{

Stream s = responseObj.GetResponseStream();

long lPosition=0;

while (lPosition < responseObj.ContentLength)

{

byte[] buffer = new byte[Math.Min(5000, responseObj.ContentLength - lPosition)];

s.Read(buffer, 0, (int)Math.Min(5000, responseObj.ContentLength - lPosition));

HttpContext.Current.Response.OutputStream.Write(buffer, 0, (int)Math.Min(5000, responseObj.ContentLength - lPosition));

HttpContext.Current.Response.Flush();

lPosition += 5000;

}

}

HttpContext.Current.Response.End();

}

catch (Exception ex)

{

}

}

public bool IsReusable

{

get

{

return true;

}

}

#endregion

}

and

<httpHandlers>

<add verb="*" path="*" type="TestCommunication.CommunicationHandler"/>

</httpHandlers>

in web.config