Streaming Databased Images Using HttpHandler

asp.net, httphandler, sql-server

Solution

I finally got all images to render by changing the value of the IsReusable property to true:

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }

Apparently, this keeps the handler in memory and able to handle multiple requests. When set to false, it had to create a new instance of the handler for each incoming request.

Problem

For a long time now I have noticed something annoying when working on Web Application projects involving databased images on my local machine. By local I mean that it's a typical environment with VS 2008 and SQL Server 2005 on my workstation. Whenever I use an HttpHandler to display the images on my local, only some of the images render on each page load. However, when I push the application to a hosted environment, the problem usually disappears. However, I just pushed a new project out to a hosted environment and experienced the same problem as on my local - this time the site and the DB were on the same server in the hosting environment. Has anyone got a take on what's happening here? Here's the handler: ``` [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class FeaturedHandler : IHttpHandler { Business biz = new Business(); public void ProcessRequest(HttpContext context) { if (context.Request.QueryString["ListingID"] != null) { int listingID = Convert.ToInt32(context.Request.QueryString["ListingID"]); DataSet ds = biz.GetFeaturedImageByID(listingID); DataRow row = ds.Tables[0].Rows[0]; byte[] featureImage = (byte[])row["Photo"]; context.Response.ContentType = "image/jpeg"; context.Response.OutputStream.Write(featureImage, 0, featureImage.Length); } else throw new ArgumentException("No ListingID parameter specified"); } public bool IsReusable { get { return false; } } } ``` I have tried using a DB on a separate server but encountered the same problem. Should I be using a DataReader instead? UPDATE I should have used a DataReader initially since I am reading binary data.

Original source

Related problems