asp.net ashx请求404

nic*_*wdy 5 c# asp.net iis ashx

我正在使用ashx请求处理程序来检索图像,并且ashx文件中的断点未被命中.当我使用firebug时,我可以看到请求返回404,这使我认为我需要配置一些设置,以便可以找到ashx文件.

我正在使用visual studio 2008和.net 3.5.

ASHX文件

namespace hybrid.content.Handlers
{
 public class DB_Images : IHttpHandler
 {
    public void ProcessRequest(HttpContext context)
    {
        Int32 image_id;
        if (context.Request.QueryString["id"] != null)
            image_id = Convert.ToInt32(context.Request.QueryString["id"]);
        else
            throw new ArgumentException("No parameter specified");

        context.Response.ContentType = "image/jpeg";
        Stream strm = GetImageFromDatabase(image_id);
        if (strm != null)
        {
            byte[] buffer = new byte[4096];
            int byteSeq = strm.Read(buffer, 0, 4096);

            while (byteSeq > 0)
            {
                context.Response.OutputStream.Write(buffer, 0, byteSeq);
                byteSeq = strm.Read(buffer, 0, 4096);
            }
            //context.Response.BinaryWrite(buffer);
        }
    }

    public Stream GetImageFromDatabase(int image_id)
    {
        SqlConnectionStringBuilder connstr = new SqlConnectionStringBuilder();
        //connstr.InitialCatalog = "dummy";
        //connstr.UserID = "sa";
        //connstr.Password = "password";
        //connstr.DataSource = "source";
        connstr.InitialCatalog = "smsdb";
        connstr.UserID = "user";
        connstr.Password = "password";
        connstr.DataSource = "10.31.4.79";

        SqlConnection conn = new SqlConnection(connstr.ConnectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        //            cmd.CommandText = "select image from cis_images where image_id = @p_image_id";
        cmd.CommandText = "select image from test_images where image_id = @p_image_id";
        cmd.Parameters.AddWithValue("@p_image_id", image_id);
        conn.Open();
        object img = cmd.ExecuteScalar();
        try
        {
            return new MemoryStream((byte[])img);
        }
        catch
        {
            return null;
        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

页面点击事件

protected void Button1_Click(object sender, EventArgs e)
    {
        Image1.ImageUrl = "~/DB_Images.ashx?id=" + TextBox1.Text;
    }
Run Code Online (Sandbox Code Playgroud)

ashx html

<%@ WebHandler Language="C#" CodeBehind="DB_Images.ashx.cs" Class="hybrid.content.Handlers.DB_Images" %>
Run Code Online (Sandbox Code Playgroud)

除了该引用之外没有任何HTML.

有什么东西让我失去工作吗?

Mac*_*ver 2

如果您在 ASP.NET 中使用通用处理程序,则需要检查一些事项。

1.) 如果确实是 32 位,请确保已将应用程序池中的“32 位应用程序”标志设置为 32 位。默认值为“假”。

2.) 将应用程序池从集成转为经典

3.) 适当更改应用程序池中的.NET 版本。在您的情况下,请使用 v2,因为 3.5 使用版本 2。.NET 4.0 使用 .NET 4.0。

4.) 确保 ASP.NET 已注册。运行代码块中的所有内容。

C:\> cd C:\Windows\Microsoft.NET\Framework64\{version} C:\Windows\Microsoft.NET\Framework64{版本}>aspnet_regiis.exe -i

5.) 在 IIS 管理器中右键单击服务器名称(不是站点名称)后选择“ISAPI 和 CGI​​ 限制”,然后右键单击正确的“ASP.NET {版本}”行并选择“允许”。

6.) 确保您的处理程序映射(对于 *.ashx)在服务器级别、站点级别或在 web.config 中显式打开(也称为“启用”)。