2011-10-28 18 views
7

Mam aplikację, która opiera się w dużym stopniu na wykresie, a obecnie wykresy będą działały na serwerze ASP.Net Development Server, ale kiedy spróbuję opublikować na moim serwerze (serwer Win 2008 R2, IIS 7), wykresy nie pojawiają się.ASP.NET Charting Control nie działa na serwerze produkcyjnym

Korzystając z Firebug, widzę, że wywołanie do ChartImg.axd zwraca 404, a wszystko, co otrzymuję, to pusty uchwyt obrazu w IE lub nic w Firefoksie. Dotychczas szukałem około 3 lub 4 godzin i próbowałem prawie wszystkiego, co zalecałem, ale nic nie działa.

Chciałbym użyć memory/HttpImageHandler, zamiast konfiguracji ImageLocation.

Moja 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> 

Czy ktoś ma jakieś pomysły, dokąd idę źle zachować to z pracy na moim serwerze?

+0

r U sensu [Wykresy fuzyjne] (http://www.fusioncharts.com/free/), jest on wolny i super. – Bastardo

+0

@bastardo Nie teraz http://www.fusioncharts.com/goodies/fusioncharts-free/ – Zerotoinfinity

Odpowiedz

5

Znalazłem odpowiedź na mój problem, ale uważam, że mój problem wynikał właśnie z tego, w jaki sposób działa mój kod.

Po ustawieniu privateImages=false w aplikacji ustawień dla mojego ChartImageHandler, moje obrazy wymyślił bez problemu, używając ImageLocation z przechowywania plików lub HttpHandler z pamięci.

Spojrzałem na listę here i zrozumiałem, że mój kod ma żaden z poniższych:

  • uwierzytelniania
  • sessionid
  • AnonymousID

więc niejawna domyślne ustawienie privateImages=true została powstrzymywanie mnie przed pobieraniem moich obrazów. Kiedy ustawiłem privateImages=false, nie miałem żadnych problemów i wykresy działały poprawnie. Ustawiłem moją aplikację, aby używała uwierzytelniania systemu Windows, i ustawiono privateImages=true, a moje wykresy są teraz generowane z ustawieniem lokalizacji obrazu lub ustawienia HttpHandler.

Mam nadzieję, że jest to pomocne. Wiem, że spędziłem dużo czasu na kopaniu i nie doszedłem nigdzie.

1

Wygląda na to, że problem z zabezpieczeniami/uprawnieniami. Czy zapisujesz wykresy w folderze lokalnym, a następnie przypisujesz uprawnienia do zapisu dla użytkowników usług IIS i/lub usług sieciowych dla tego folderu.

+0

Mimo że próbuję nie używać lokalizacji obrazu, dałem usługę sieciowej modyfikacji uprawnień dla mojego folderu c: \ TempImageFiles \, i obrazy są umieszczane w folderze, co prowadzi mnie do przekonania, że ​​działa zgodnie z przeznaczeniem, ale nie przychodzą one do mojej aplikacji. Wciąż wydaje mi się, że robię błąd 404. – Adam

+0

Spróbuj utworzyć folder "tempimage" w folderze IIS i spróbuj uzyskać do niego dostęp bezpośrednio z sieci, np. "Www.twojadomena.com/Tempimagefile/char.jpg" i sprawdź, czy działa. Następnie użyj tej lokalizacji na swojej stronie internetowej. – dpac

+0

Lub zmień specyfikacje ChartImageHandler w ustawieniach aplikacji, aby utworzyć obraz w pamięci, a nie w pliku. – AgapwIesu

0

Instalacja Kontroli wykres Microsoft na swoim serwerze lub spróbuj tego:

ASP.Net Chart Control On Shared Hosting Environment

Należy również sprawdzić, że HttpHandler jest zarejestrowany w system.webServer w web.config podczas jazdy pod IIS 7.

+0

Wierzę, że formanty wykresu są wbudowane w platformę .NET 4.0. Handler jest obecny w listingach aplikacji w obszarze Mapowania menedżerów w Menedżerze IIS. – Adam

3

Ta konfiguracja działa dla mnie. Musisz użyć pamięci jako pamięci.

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

Rozumiem, że jest to trochę stary post, ale czy możesz mi powiedzieć, gdzie dokładnie wstawiłeś powyższy wiersz kodu? Dzięki. – htm11h

+0

W pliku App.Config w sekcji

+0

Myślę, że to jest prawdziwa odpowiedź. Problem polega na tym, że jeśli zostawisz miejsce pamięci o wartości domyślnej ("plik"), to program obsługi spróbuje utworzyć plik i udostępnić go klientowi. Jeśli użytkownik nie ma uprawnień do tworzenia plików w lokalizacji serwera określonej w ustawieniach aplikacji obsługi obrazu znaku, cała operacja kończy się niepowodzeniem. Ale prawdopodobnie chcemy, aby serwer tworzył obraz w pamięci i przekazywał go do klienta. Nie trzeba tworzyć fizycznego pliku, który dostanie się do problemów z autoryzacją plików. – AgapwIesu

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

spróbuj to: zmiana Version = 4.0.0.0 do wersji = 3.5.0.0

+0

Ma to zastosowanie tylko w przypadku korzystania z .Net 3.5, czy nie? –

0

wypróbować ten został rozwiązany w przypadku sieci.konfiguracyjny wykonawcze błąd

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

/>

Powiązane problemy