ASP.NET Элемент управления построением графиков не работает на рабочем сервере

#asp.net #mschart

#asp.net #mschart

Вопрос:

У меня есть приложение, которое в значительной степени зависит от построения графиков, и в настоящее время графики будут работать в ASP.Net Сервер разработки, но когда я пытаюсь опубликовать его на своем сервере (Win 2008 Server R2, IIS 7), диаграммы не отображаются.

Используя Firebug, я вижу, что вызов ChartImg.axd возвращает 404, и все, что я получаю, это пустой держатель изображения в IE или ничего в Firefox. Я искал около 3 или 4 часов и перепробовал практически все рекомендуемые, но, похоже, ничего не работает.

Я хотел бы использовать memory / HttpImageHandler вместо конфигурации ImageLocation.

Мой Web.Config

     <appSettings>
    <!--<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:TempImageFiles;" />-->
    <add key="ChartImageHandler" value="storage=memory;timeout=20;deleteAfterServicing=false" />
  </appSettings>
  <system.webServer>
    <handlers>
      <remove name="ChartImageHandler" />
      <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST"
        path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </handlers>
  </system.webServer>
  <system.web>
    <httpHandlers>
      <add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        validate="false" />
    </httpHandlers>
    <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
          assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </controls>
    </pages>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </assemblies>
    </compilation>
    <customErrors mode="Off"/>
  </system.web>
  

Есть ли у кого-нибудь идеи, где я ошибаюсь, чтобы это не работало на моем сервере?

Комментарии:

1. вы не используете Fusion Charts , это потрясающе и бесплатно.

2. @bastardo Не сейчас fusioncharts.com/goodies/fusioncharts-free

Ответ №1:

Я нашел ответ на свою проблему, но я считаю, что моя проблема связана именно с тем, как выполняется мой код.

Как только я установил privateImages=false в AppSettings для своего ChartImageHandler, мои изображения появились без проблем, используя ImageLocation с файловым хранилищем или HttpHandler с хранилищем памяти.

Я просмотрел список здесь и понял, что в моем коде нет НИЧЕГО из следующего:

  • Аутентификация
  • Идентификатор сеанса
  • Анонимный идентификатор

таким образом, неявная настройка по умолчанию privateImages=true не позволяла мне загружать мои изображения. Когда я установил privateImages=false , у меня не было проблем, и графики работали правильно. Я настроил свое приложение на использование проверки подлинности Windows, и set privateImages=true , и мои диаграммы теперь генерируются либо с настройкой местоположения изображения, либо с настройкой HttpHandler.

Надеюсь, это полезно. Я знаю, что потратил много времени на поиск и ничего не добился.

Ответ №2:

Эта конфигурация работает для меня. Вам необходимо использовать память в качестве хранилища.

 < add key="ChartImageHandler" value="storage=memory;deleteAfterServicing=true;timeout=20;"/>
  

Комментарии:

1. Я понимаю, что это немного старый пост, но не могли бы вы сказать мне, куда именно вы вставили приведенную выше строку кода? Спасибо.

2. В файле App.Config в разделе <AppSettings>

3. Я думаю, что это реальный ответ. Проблема, по-видимому, заключается в том, что если вы оставляете хранилище со значением по умолчанию («файл»), обработчик пытается создать файл и передать его клиенту. Если у пользователя нет авторизации для создания файлов в расположении сервера, указанном в этом параметре приложения char image handler, то все это завершается с ошибкой. Но мы, вероятно, хотим, чтобы сервер создавал изображение в памяти и передавал его клиенту оттуда. Нет необходимости создавать физический файл, который вызывает проблемы с авторизацией файлов.

Ответ №3:

Похоже, проблема безопасности / разрешений. Вы сохраняете диаграммы в локальную папку, затем назначаете разрешение на запись для пользователя IIS и / или пользователей сетевых служб для этой папки.

Комментарии:

1. Хотя я пытаюсь не использовать расположение изображения, я предоставил сетевой службе разрешения на изменение для моего c:TempImageFiles folder, и изображения действительно помещаются в папку, что наводит меня на мысль, что все работает так, как задумано, но они не передаются в мое приложение. Кажется, я все еще получаю ошибку 404 при выполнении этого.

2. Попробуйте создать папку ‘tempimagefile’ в папке IIS и попробуйте получить к ней прямой доступ из Интернета, например ‘www.yourdomain.com/Tempimagefile/char.jpg — и посмотрим, сработает ли это. Затем используйте это расположение на своей веб-странице.

3. Или измените спецификации ChartImageHandler в настройках приложения, чтобы создать изображение в памяти, а не в файле.

Ответ №4:

Установите элементы управления диаграммами Microsoft на свой веб-сервер или попробуйте это:

ASP.Net Управление диаграммами в среде общего хостинга

Также убедитесь, что HttpHandler зарегистрирован в system.webServer в вашем web.config при запуске под IIS 7.

Комментарии:

1. Я считаю, что элементы управления диаграммами встроены в .NET 4.0 Framework. Обработчик присутствует в списках для приложения в разделе Сопоставления обработчиков в диспетчере IIS

Ответ №5:

   <controls>
        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
          assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </controls>
  

попробуйте это: измените Version= 4.0.0.0 на Version = 3.5.0.0

Комментарии:

1. Это применимо только в том случае, если вы используете .Net 3.5, не так ли?

Ответ №6:

попробуйте это, это было решено в случае ошибки времени выполнения web.config

 <pre>
<add key="ChartImageHandler" value="storage=memory;timeout=20;deleteAfterServicing=true;Url=~temp"
  

/>