0

データベースから画像を読み取り、Webページに表示するために使用される次のハンドラークラスを作成しました。

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Web;

public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IranQRDBConnectionString"].ConnectionString);
    public void ProcessRequest(HttpContext context)
    {
        try
        {
            string TableName = context.Session["TableToQuery"].ToString();
            string ID = context.Session["ID"].ToString();

            SqlCommand comm = new SqlCommand("SELECT * FROM " + TableName + " WHERE ID=" + ID, conn);

            conn.Open();
            SqlDataReader dr = comm.ExecuteReader();
            dr.Read();
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite((byte[])dr["Image"]);
            conn.Close();

        }
        catch
        {
            SqlCommand comm = new SqlCommand("SELECT * FROM DefaultImage WHERE ID=1", conn);

            conn.Open();
            SqlDataReader dr = comm.ExecuteReader();
            dr.Read();
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite((byte[])dr["Image"]);
            conn.Close();
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

このクラスは私のローカルでうまく機能します!Webサイトをアップロードしましたが、データベースにクエリを実行すると、画像が画像コントロールに表示されない場合を除いて、すべてのデータがWebページに返されます。Webを検索したところ、ハンドラーをweb.configファイルに登録する必要があり、IISバージョンはホスト上で7であり、統合モードで実行されていることがわかりました。だから私はそのハンドラーをの<System.webserver><Handlers> 一部に登録する必要があることを知っていweb.configます。

詳細については、ハンドラークラスをディレクトリではなくプロジェクトのルートディレクトリに追加しましたApp_Code。そして、私はWebサイトをプリコンパイルされたWebサイトとしてアップロードHandler.ashxし、ルートディレクトリにプリコンパイルされ、App_Web_handler.ashx.cdcab7d2.dllファイルをに持っていますApp_Code

私も追加しました:

<add name="ImageHandler" verb="*" path="*.jpg" type="Handler" />

私のweb.configファイルでは、それでも機能しません:(

誰かが正しい登録を見つけるのを手伝ってくれませんか?

4

2 に答える 2

2

IISマッピングで*.jpgをASPXファイルハンドラーにマップする必要があります。そうしないと、機能しません。このリンクは次のことに役立ちます。方法:IISでHTTPハンドラー拡張機能を構成する

于 2012-08-06T11:40:06.287 に答える
0

そして、ここに答えがあります!私のコードには何の問題もありませんでした。ホストにファイアウォールがあり、画像を表示できませんでした。ファイアウォールを構成した後、私のプロジェクトはうまく機能します:)

于 2012-08-09T04:48:44.713 に答える