加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 使用HttpHandler流式传输数据库图像

发布时间:2020-12-16 06:42:12 所属栏目:asp.Net 来源:网络整理
导读:很长一段时间以来,当我在本地机器上处理涉及数据库图像的Web应用程序项目时,我注意到了一些烦人的事情.在本地,我的意思是它是我工作站上VS 2008和SQL Server 2005的典型环境.每当我使用HttpHandler在我的本地显示图像时,每个页面加载时只会呈现一些图像. 但
很长一段时间以来,当我在本地机器上处理涉及数据库图像的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,featureImage.Length);
        }
        else
            throw new ArgumentException("No ListingID parameter specified");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

我曾尝试在单独的服务器上使用数据库,但遇到了同样的问题.我应该使用DataReader吗?

UPDATE
我应该最初使用DataReader,因为我正在读取二进制数据.

解决方法

我最终通过将IsReusable属性的值更改为true来获取要渲染的所有图像:

public bool IsReusable
    {
        get
        {
            return true;
        }
    }

显然,这使处理程序保持在内存中并能够处理多个请求.设置为false时,必须为每个传入请求创建一个新的处理程序实例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读