很长一段时间以来,当我在本地计算机上处理涉及数据库图像的 Web 应用程序项目时,我注意到一些烦人的事情。我所说的本地是指我的工作站上装有 VS 2008 和 SQL Server 2005 的典型环境。每当我使用 HttpHandler 在本地显示图像时,每个页面加载时只会呈现部分图像。
但是,当我将应用程序推送到托管环境时,问题通常会消失。但是,我刚刚将一个新项目推送到托管环境,并遇到了与本地环境相同的问题 - 这次站点和数据库位于托管环境中的同一台服务器上。有人了解这里发生的事情吗?
这是处理程序:
[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;
}
}
}
我尝试过在单独的服务器上使用数据库,但遇到了同样的问题。我应该使用 DataReader 吗?
UPDATE因为我正在读取二进制数据,所以最初我应该使用 DataReader。
我终于通过更改的值来渲染所有图像可重复使用财产给true:
public bool IsReusable
{
get
{
return true;
}
}
显然,这将处理程序保留在内存中并能够处理多个请求。当设置为 false 时,它必须为每个传入请求创建一个新的处理程序实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)