#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"
/>