2011-10-28 13 views
7

Ho un'applicazione che fa molto affidamento sulla creazione di grafici e attualmente i grafici funzioneranno nel server di sviluppo ASP.Net, ma quando provo a pubblicare sul mio server (Win 2008 Server R2, IIS 7), i grafici non vengono visualizzati.ASP.NET Charting Control non funziona sul server di produzione

Utilizzando Firebug, posso vedere che la chiamata a ChartImg.axd restituisce un 404 e tutto ciò che ottengo è un supporto immagine vuoto in IE, o nulla in Firefox. Ho cercato circa 3 o 4 ore fino ad ora, e ho provato praticamente tutto ciò che è raccomandato, ma non sembra funzionare.

Vorrei utilizzare la memoria/HttpImageHandler, invece della configurazione ImageLocation.

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

Qualcuno ha qualche idea dove sto andando male per mantenere questo di lavorare sul mio server?

+0

y u inutile [Fusion Grafici] (http://www.fusioncharts.com/free/), è impressionante e libera. – Bastardo

+0

@bastardo Non ora http://www.fusioncharts.com/goodies/fusioncharts-free/ – Zerotoinfinity

risposta

5

Ho trovato la risposta al mio problema, ma credo che il mio problema derivasse specificamente dal modo in cui viene eseguito il mio codice.

Dopo aver impostato privateImages=false in AppSettings per my ChartImageHandler, le mie immagini si sono presentate senza problemi, utilizzando ImageLocation con archiviazione file o HttpHandler con memoria di archiviazione.

ho guardato la lista here e realizzato che il mio codice ha nessuna delle seguenti:

  • autenticazione
  • SessionID
  • AnonymousID

così l'impostazione di default implicito privateImages=true è stata impedendomi di scaricare le mie immagini. Quando ho impostato privateImages=false non ho avuto problemi e le classifiche hanno funzionato correttamente. Ho impostato la mia applicazione per utilizzare l'autenticazione di Windows e ho impostato privateImages=true e ora i miei grafici vengono generati con l'impostazione Posizione immagine o l'impostazione HttpHandler.

Speriamo che questo sia utile. So di aver passato molto tempo a scavare e non ho ottenuto nulla.

1

Sembra un problema di sicurezza/autorizzazione. Stai salvando i grafici nella cartella locale, quindi assegna i permessi di scrittura per gli utenti di IIS e/o gli utenti dei servizi di rete per quella cartella.

+0

Anche se sto tentando di non utilizzare Image Location, ho dato a Network Service i permessi di modifica per la mia cartella c: \ TempImageFiles \ e le immagini vengono collocate nella cartella, il che mi porta a credere che funzioni come previsto, ma non si presentano alla mia applicazione. Ancora mi sembra di ottenere un errore 404 quando lo faccio. – Adam

+0

Prova a creare la cartella "tempimagefile" nella cartella IIS e prova ad accedervi direttamente dal web come "www.yourdomain.com/Tempimagefile/char.jpg" e vedere se funziona. Quindi utilizzare questa posizione nella tua pagina web. – dpac

+0

Oppure modificare le specifiche ChartImageHandler nelle impostazioni dell'app per creare l'immagine nella memoria anziché in un file. – AgapwIesu

0

Installare i Microsoft Chart Controls sul vostro web server o provare questo:

ASP.Net Chart Control On Shared Hosting Environment

Controllare anche che il HttpHandler è registrato in system.webServer nel web.config durante l'esecuzione in IIS 7.

+0

Credo che i controlli grafici siano integrati in .NET 4.0 Framework. Il gestore è presente negli elenchi dell'applicazione in Gestori mappature in Gestione IIS – Adam

3

Questa configurazione funziona per me. È necessario utilizzare la memoria come memoria.

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

Mi rendo conto che si tratta di un post vecchio, ma puoi dirmi dove hai inserito esattamente la riga di codice sopra? Grazie. – htm11h

+0

Nel file App.Config nella sezione

+0

, penso che questa sia la vera risposta. Il problema sembra essere che se si lascia lo spazio di archiviazione con il suo valore predefinito ("file"), il gestore tenta di creare un file e distribuirlo al client. Se l'utente non dispone dell'autorizzazione per creare file sulla posizione del server specificata nell'impostazione dell'app del gestore di immagini char, l'intera operazione non riesce. Ma quello che probabilmente vorremmo è che il server crei l'immagine in memoria e la trasmetta al client da lì. Non c'è bisogno di creare un file fisico che entri nei problemi di autorizzazione dei file. – 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> 

provare questo: cambiare Version = 4.0.0.0 alla versione = 3.5.0.0

+0

Questo si applicherebbe solo se steste usando. 3.5 3.5 non sarebbe? –

0

provare questo è stato risolto in caso di web.config runtime errore

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

/>

Problemi correlati