Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с показом рисунков
|
|||
|---|---|---|---|
|
#18+
Показываю рисунки через базу с помощью хэндлера. Однако при показе на странице нескольких картинок -- не все они прорисовываются. Что делать с этим? Привожу код: 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; } } } }//Подключение к БД закрыто } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2006, 15:57 |
|
||
|
Проблема с показом рисунков
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>Показываю рисунки через базу с помощью хэндлера. Однако при показе на странице нескольких картинок -- не все они прорисовываются. Что делать с этим? Может быть, потому что не указан ContentType для Response. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2006, 16:26 |
|
||
|
Проблема с показом рисунков
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, <Аноним>, Вы писали: А>Показываю рисунки через базу с помощью хэндлера. Однако при показе на странице нескольких картинок -- не все они прорисовываются. Что делать с этим? Убрать приседания и создавать подключение для каждого запроса. 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2006, 09:47 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=34059045&tid=1388543]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 374ms |

| 0 / 0 |
