На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Отдача сервером дубликата картинок
    Подскажите куда копать..
    есть сайт на аспе, дотнет 4, все рюшечки вырезаны, представляет он собой одну default.aspx, внутри генерится html (руками сроки) где на странице отображены десяток картинок. Картинки отдаются этой же страницей (скриптом), в html картинка задается так: <IMG src='default.aspx?main=1&photo_id_preview=52067'>

    код примерно такой:
    ExpandedWrap disabled
      public partial class WebForm1 : System.Web.UI.Page
          {
              protected void Page_Load(object sender, EventArgs e)
              {
       
                  GP.Init(Request, Response);
       
                  int photo_result_id = 1;
                  int shop_id_current = -1;
       
                  if (GP.GET("photo_id_preview") != null)
                  {
                      if (int.TryParse(GP.GET("photo_id_preview"), out photo_result_id))
                      {
                          DateTime date_modif;
                          int resid = 0;
                          int tasid = 0;
                          
                          MemoryStream ms = GetPhoto_fs(photo_result_id);
       
                          if (ms != null)
                          {
                              Response.Clear();
                              Response.ClearHeaders();
                              Response.ClearContent();
                              Response.ContentType = "image/jpeg";
                              //Response.AppendHeader("content-disposition", "attachment; filename=PhotoTask_" + photo_result_id.ToString() /*date_modif.ToString("ddMMyyyyhhmmss")*/ + "_prev.jpg");
                              //Response.AppendHeader("Last-Modified", date_modif.ToString("D, d M Y hh:mm:ss") + " GMT");
                              //Response.AppendHeader("Expires", date_modif.AddMonths(1).ToString("D, d M Y hh:mm:ss") + " GMT");
       
                             // Thread.Sleep(100);
       
                              ms.Position = 0;
                              ms.WriteTo(Response.OutputStream);
                              ms.Close();
                              Response.End();
                          }
       
                          return;
                      }
                  }


    ExpandedWrap disabled
       public MemoryStream GetPhoto_fs(int resid)
              {
       
                  MemoryStream ms = new MemoryStream();
                  if (File.Exists(@"путь\" +  "_" + resid.ToString() + "_" + "_prev.jpg"))
                  {
                      using (FileStream file = new FileStream(@"путь\" + "_" + resid.ToString() + "_" + "_prev.jpg", FileMode.Open, FileAccess.Read))
                      {
                          byte[] bytes = new byte[file.Length];
                          file.Read(bytes, 0, (int)file.Length);
                          ms.Write(bytes, 0, (int)file.Length);
                      }
                  }
       
                  return ms;
              }


    т.е. отдает картинку и скрипт вырубается.
    Проблема: часто отдается картинка для другого URL. Т.е. на странице часто можно наблюдать пары одинаковых картинок. По F5 они обновляются и уже другие могут быть одинаковые. Куда копать и что подкрутить? Эта фигня наблюдается как в отладчике vs2012, так и в свежепоставленном IIS (win7 x64) с быстренько созданном сайтом. По логам IIS видно что URL приходят правильные, с разметкой все ровно, а отдаются некоторые одинаковые (размер в байтах вывел). Такое ощущение что глючит какой-то пулинг у приложения на вебсервере, примерно как при работе с общими ресурсами в многопоточности без синхронизации. Проблема наблюдается когда сразу несколько картинок загружаются (вставил sleep() - заметно стало что запросы приходят по два сразу). браузеры разные

    Добавлено
    вот отморозок... собственно оно наверняка и есть

    ExpandedWrap disabled
      static private NameValueCollection GetArray;
              static private NameValueCollection PostArray;
       
              static private HttpResponse _resp;
              static private HttpRequest _req;
       
              static public void Init(HttpRequest page, HttpResponse resp) {
                  GetArray = page.QueryString;
                  PostArray = page.Form;
       
                  _resp = resp;
                  _req = page;
              }
      Проблема в использовании static, надо доступ к этому безобразию разграничить между потоками с помощью lock.
      Сообщение отредактировано: UncleBob -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0192 ]   [ 16 queries used ]   [ Generated: 16.04.24, 09:21 GMT ]