2011-10-28 32 views
7

Tengo una aplicación que depende en gran medida de la creación de gráficos y actualmente los gráficos funcionarán en el servidor de desarrollo ASP.Net, pero cuando intento publicarlos en mi servidor (Win 2008 Server R2, IIS 7), los gráficos no aparecen.ASP.NET Charting Control no funciona en el servidor de producción

Usando Firebug, puedo ver que la llamada a ChartImg.axd devuelve un 404, y todo lo que obtengo es un titular de imagen en blanco en IE, o nada en Firefox. He buscado aproximadamente 3 o 4 horas hasta ahora, y he intentado casi todo lo recomendado, pero nada parece estar funcionando.

Me gustaría utilizar la memoria/HttpImageHandler, en lugar de la configuración de ImageLocation.

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

¿Alguien tiene alguna idea de dónde voy mal para evitar que esto trabajando en mi servidor?

+0

y u no sirve [Fusioncharts] (http://www.fusioncharts.com/free/), que es impresionante y libre. – Bastardo

+0

@bastardo Ahora no http://www.fusioncharts.com/goodies/fusioncharts-free/ – Zerotoinfinity

Respuesta

5

Encontré la respuesta a mi problema, pero creo que mi problema proviene específicamente de cómo se ejecuta mi código.

Una vez que configuré privateImages=false en appSettings para mi ChartImageHandler, mis imágenes surgieron sin problema, usando ImageLocation con almacenamiento de archivos o HttpHandler con almacenamiento de memoria.

Miré la lista here y se dio cuenta de que mi código no tiene ninguno de los siguientes:

  • autenticación
  • SessionID
  • AnonymousID

por lo que la configuración por defecto implícito de privateImages=true se evitando que descargue mis imágenes. Cuando configuré privateImages=false no tuve problemas y los gráficos funcionaron correctamente. Configuré mi aplicación para usar Autenticación de Windows y establecí privateImages=true y ahora mis gráficos se están generando con la configuración de Ubicación de la imagen o la configuración de HttpHandler.

Espero que esto sea útil. Sé que pasé mucho tiempo cavando y no llegué a ninguna parte.

1

Parece un problema de seguridad/permiso. ¿Está guardando cuadros en una carpeta local y luego asigna permisos de escritura para el usuario de IIS y/o los usuarios de servicios de red para esa carpeta?

+0

Aunque intento no usar la Ubicación de la imagen, le proporcioné al Servicio de Red que modifique los permisos para mi carpeta c: \ TempImageFiles \, y las imágenes se colocan en la carpeta, lo que me lleva a pensar que funciona según lo previsto, pero no se están enviando a mi aplicación. Todavía parece obtener un error 404 al hacer esto. – Adam

+0

Intenta crear la carpeta 'tempimagefile' en tu carpeta IIS e intenta acceder directamente desde la web como 'www.tudominio.com/Tempimagefile/char.jpg' y verifica si funciona. Luego usa esta ubicación en tu página web. – dpac

+0

O bien, cambie las especificaciones de ChartImageHandler en la configuración de la aplicación para crear la imagen en la memoria en lugar de en un archivo. – AgapwIesu

0

Instalar los controles Gráfico de Microsoft en su servidor web o intente esto:

ASP.Net Chart Control On Shared Hosting Environment

También puedes ver que el HttpHandler se ha registrado en system.webServer en su web.config cuando se ejecuta en IIS 7.

+0

Creo que Chart Controls está integrado en .NET 4.0 Framework. El controlador está presente en los listados de la aplicación en Asignaciones de manejador en el Administrador IIS – Adam

3

Esta configuración funciona para mí. Necesita usar la memoria como almacenamiento.

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

Me doy cuenta de que esta es una publicación un poco antigua, pero ¿puede decirme exactamente dónde insertó la línea de código anterior? Gracias. – htm11h

+0

En el archivo App.Config en la sección

+0

, creo que esta es la verdadera respuesta. El problema parece ser que si deja el almacenamiento con su valor predeterminado ("archivo"), entonces el controlador intenta crear un archivo y entregarlo al cliente. Si el usuario no tiene autorización para crear archivos en la ubicación del servidor especificada en esa configuración de aplicación de gestor de imágenes char, todo falla. Pero lo que probablemente queremos es que el servidor cree la imagen en la memoria y la envíe al cliente desde allí. No es necesario crear un archivo físico que entre en problemas de autorización de archivos. – 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> 

intente esto: cambio de versión = 4.0.0.0 a la versión 3.5.0.0 =

+0

Esto solo se aplicaría si estuviera usando .Net 3.5 ¿no es así? –

0

intente esto se resolvió en el caso de la web.config error de ejecución

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

/>

Cuestiones relacionadas