Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с показом рисунков / 3 сообщений из 3, страница 1 из 1
02.10.2006, 15:57
    #34026415
Аноним
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с показом рисунков
Показываю рисунки через базу с помощью хэндлера. Однако при показе на странице нескольких картинок -- не все они прорисовываются. Что делать с этим?
Привожу код:



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

public class Image : IHttpHandler
{

    #region WorkWithConnection

    private void CloseSqlConnection(SqlConnection conn)
    {
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
        }

    }

    private void OpenSqlConnection(SqlConnection conn)
    {
        if (conn.State == ConnectionState.Closed)
        {
            conn.Open();
        }
    }

    #endregion

    private static bool _isExec = false;
    public static bool IsExec
    {
        get
        {
            return _isExec;
        }
        set
        {
            _isExec = value;
        }
    }
    //Свойство, указывающее на то, может ли класс вызываться без повторной инициализации
    bool IHttpHandler.IsReusable
    {
        get
        {
            return true;
        }
    }

    //Метод ProcessRequest, выполняющий обработку запроса
    void IHttpHandler.ProcessRequest(HttpContext context)
    {
        if (!IsExec)
        {
            lock (this)
            {
                try
                {
                    IsExec = true;
                    //Получаем значение идентификатора картинки
                    int id = Int32.Parse(context.Request.QueryString["ID"]);
                    //Создаем подключение к БД 

                    //SqlCommand myCmd = new SqlCommand("select image from ImagesHTML where id = @id", Connection.SqlConn);
                    string strSQL = "viewImage";
                    SqlCommand myCmd = new SqlCommand(strSQL, Connection.SqlConn);

                    myCmd.CommandType = CommandType.StoredProcedure;
                    myCmd.Parameters.Add("id", SqlDbType.Int).Value = id;

                    OpenSqlConnection(myCmd.Connection);

                    using (SqlDataReader rdr = myCmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        // Проверка на существование записи
                        if (rdr.Read())
                            // пишем содержимое картинки клиенту.
                            context.Response.BinaryWrite(rdr.GetSqlBinary(0).Value);
                    }
                }
                catch (Exception ex)
                {
                    //throw new Exception(err.Message);
                    context.Response.Write(ex.Message);
                }
                finally
                {
                    CloseSqlConnection(Connection.SqlConn);
                    IsExec = false;
                }  
            }
        }
    }//Подключение к БД закрыто
}
...
Рейтинг: 0 / 0
02.10.2006, 16:26
    #34026503
algol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с показом рисунков
Здравствуйте, Аноним, Вы писали:

А>Показываю рисунки через базу с помощью хэндлера. Однако при показе на странице нескольких картинок -- не все они прорисовываются. Что делать с этим?

Может быть, потому что не указан ContentType для Response.
...
Рейтинг: 0 / 0
17.10.2006, 09:47
    #34059045
Sinclair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с показом рисунков
Здравствуйте, <Аноним>, Вы писали:

А>Показываю рисунки через базу с помощью хэндлера. Однако при показе на странице нескольких картинок -- не все они прорисовываются. Что делать с этим?
Убрать приседания и создавать подключение для каждого запроса.

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

public class Image : IHttpHandler
{

    bool IHttpHandler.IsReusable
    {
        get { return true; }
    }

    //Метод ProcessRequest, выполняющий обработку запроса
    void IHttpHandler.ProcessRequest(HttpContext context)
    {
        try
        {
            //Получаем значение идентификатора картинки
            int id = Int32.Parse(context.Request.QueryString["ID"]);
            //Создаем подключение к БД 
    
            string strSQL = "viewImage"; // "select image from ImagesHTML where id = @id"
            using (SqlConnection conn = GetConnection())
            using (SqlCommand myCmd = new SqlCommand(strSql, conn)
            {
                myCmd.CommandType = CommandType.StoredProcedure;
                myCmd.Parameters.Add("id", SqlDbType.Int).Value = id;
    
                using (SqlDataReader rdr = myCmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    // Проверка на существование записи
                    if (rdr.Read())
                    {
                        // выставляем тип контента
                        Response.ContentType = "image"; // не забыть поставить настоящий тип, например, image/gif
                        // пишем содержимое картинки клиенту.
                        context.Response.BinaryWrite(rdr.GetSqlBinary(0).Value);
                    }
                    else
                    {
                        // картинка не найдена:
                        Response.StatusCode = "404";
                        Response.StatusDescription = "Image Not Found";
                        Response.End;
                    }
                }
            }
        } catch(Exception e)
        {
          Response.StatusCode = "500";
            Response.StatusDescription = "Internal Error";
            Response.Write(e.Message);
        }
    }
    private SqlConnection GetConnection()
    {
      // Вписать здесь код создания соединения
    }
}
Поясняю: иногда у тебя запрос попадает в IsExec==true, а при этом, как нетрудно убедиться, клиенту возвращается пустой респонс. 1.1.4 stable rev. 510
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с показом рисунков / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]