我正在使用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;
}
}
}
}
网页点击事件
protected void Button1_Click(object sender, EventArgs e)
{
Image1.ImageUrl = "~/DB_Images.ashx?id=" + TextBox1.Text;
}
ashx html
<%@ WebHandler Language="C#" CodeBehind="DB_Images.ashx.cs" Class="hybrid.content.Handlers.DB_Images" %>
除了该引用之外没有任何HTML。
是否有一些我缺少的东西可以让它发挥作用?
答案 0 :(得分:2)
如果您在ASP.NET中使用Generic Handler,则需要检查一些事项。
1。)确保已将应用程序池中的“32位应用程序”标志设置为32位(如果它确实是32位)。默认值为“False”。
2.。)将应用程序池从Integrated转为Classic
3.。)适当更改应用程序池中的.NET版本。在您的情况下,使用v2,因为3.5使用版本2..NET 4.0使用.NET 4.0。
4.确保ASP.NET已注册。运行代码块中的所有内容。
C:\&GT; cd C:\Windows\Microsoft.NET\Framework64\{version}
C:\的Windows \ Microsoft.NET \ Framework64 {版本}&GT; aspnet_regiis.exe -i
5.)在IIS管理器中右键单击服务器名称(而不是站点名称)后选择“ISAPI&amp; CGI限制”,然后右键单击正确的“ASP.NET {version}”行并选择“允许”
6。)确保在服务器级别或站点级别或在web.config中明确启用了处理程序映射(用于* .ashx)(也称为“启用”)。
答案 1 :(得分:2)
在我的情况下,我将ashx文件标记为无内容类型而不是内容,即属性 - &gt;构建操作应该是内容,这意味着在发布网站时不包含ashx文件。
答案 2 :(得分:0)
我认为问题在于网址。 ~/
表示您的根目录。
Use ResolveClientUrl("yourPathHere") or ResolveUrl("yourPathHere").
要获取有关此错误的详细信息,请检查图像的来源并将其复制并粘贴到地址栏中。将弹出一个由详细信息组成的黄页。
我认为唯一的问题是网址。