web-dev-qa-db-fra.com

asp.net:Répertoire temporaire non valide dans la configuration du gestionnaire de graphique [c:\TempImageFiles \]

Je reçois cette erreur Invalid temp directory in chart handler configuration [c:\TempImageFiles\]. Tout en exécutant mon code.

Initialement, je commençais à obtenir No http handler was found for request type ‘GET’ error qui a été résolu en renvoyant pas de gestionnaire http

Mais maintenant je reçois l'erreur ci-dessus Les détails de l'erreur sont 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.DirectoryNotFoundException: Invalid temp directory in chart handler configuration [c:\TempImageFiles\].

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the Origin and location of the exception can be identified using the exception stack trace below.

Le stackTrace de cette erreur

[DirectoryNotFoundException: Invalid temp directory in chart handler configuration [c:\TempImageFiles\].]
   System.Web.UI.DataVisualization.Charting.ChartHttpHandlerSettings.Inspect() +851
   System.Web.UI.DataVisualization.Charting.ChartHttpHandlerSettings.ParseParams(String parameters) +1759
   System.Web.UI.DataVisualization.Charting.ChartHttpHandlerSettings..ctor(String parameters) +619
   System.Web.UI.DataVisualization.Charting.ChartHttpHandler.InitializeParameters() +237
   System.Web.UI.DataVisualization.Charting.ChartHttpHandler.EnsureInitialized(Boolean hardCheck) +208
   System.Web.UI.DataVisualization.Charting.ChartHttpHandler.EnsureInstalled() +33
   System.Web.UI.DataVisualization.Charting.Chart.GetImageStorageMode() +57
   System.Web.UI.DataVisualization.Charting.Chart.Render(HtmlTextWriter writer) +257
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +144
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +583
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +91
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +410
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +118
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +489
   System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +84
   System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output) +713
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +144
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +583
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +91
   System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +91
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +410
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +118
   System.Web.UI.Control.Render(HtmlTextWriter writer) +60
   System.Web.UI.Page.Render(HtmlTextWriter writer) +66
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +144
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +583
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +91
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +7761

Quelqu'un peut-il me dire comment résoudre ce problème ... Devrais-je créer un répertoire temporaire manuellement ou que dois-je faire ...


Salut smarx, .__ je vérifie .. ils m'ont demandé de changer 

From   
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />

To
 <add key="ChartImageHandler" value="storage=file;timeout=20;" />

dans le fichier de configuration web ...

Mais je n'ai pas cette ligne dans ma configuration web

J'ai seulement ceci pour définir le graphique 

<add name="ChartImg" verb="*" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler,     System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"  />
<add name="ReportViewer" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler,Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

Qu'est-ce que je devrais faire maintenant....

34
veda

essayez d'ajouter cette clé à votre web.config

 <add key="ChartImageHandler" value="storage=file;timeout=20;" />

au lieu de celui par défaut:

<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
15
Mohamed Eltigani

Si vous changez la ligne suivante 

<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />

à

<add key="ChartImageHandler" value="storage=file;timeout=20;" />

ne fonctionne pas, puis modifiez la valeur de l'attribut "storage = file;" to "stockage = mémoire;" . Cela fonctionnera sûrement car vous utilisez maintenant la mémoire, au lieu de fichier.

11
Chaman Saini

Le temps avance encore et les gens ont encore des recommandations. Je suis tombé sur ce problème pendant une migration, alors j'ai pensé ajouter mes deux sous.

Pourquoi le stocker dans le système de fichiers et pas simplement le garder en mémoire?

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

Si le système de fichiers pose un problème dans Azure, ne l'utilisez pas.

5
Ian

J'ai eu le même problème, mon fournisseur avait des dossiers spéciaux avec des droits en écriture, j'ai donc changé le dossier TempImagesFile en leur dossier par défaut et cela a fonctionné.

Dans mon cas, le dossier avec les droits en écriture s'appelait upload

web.config édite:

<appSettings>
    <add key="ChartImageHandler" value="Storage=file;Timeout=20;Url=~/upload/;"/>
</appSettings>

J'espère que cela peut aider les autres aussi;)

4
Kenni

Faire les suivants

1) Ajoutez ou modifiez la clé suivante dans web.config.

<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" /

2) Donnez des privilèges d’écriture à IIS_User sur ce répertoire. Pour cela, procédez comme suit:

a) Go to Windows Explorer.
b) Right click on c:\TempImageFiles Folder.
c) click Properties.
d) Select security tab , click Edit, click Add , Click Advanced, search for IIS_User.
e) Add this IIS_User , give write permission to this user.
f) Save and Close.

Vous avez maintenant défini le répertoire et donné l'autorisation d'écriture à IIS pour écrire des fichiers image temporaires dans ce dossier.

Cela devrait fonctionner maintenant.

4
Imran Rizvi
1
smarx

Mettez à jour les paramètres de votre application avec ceci et voyez si cela résout votre problème.

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

1
javidg

Vous pouvez contourner la mise en cache temporaire des images à l'aide de BinaryStreaming. 
Google devrait faire le reste. 
Cela a fonctionné pour moi sous Linux, où il a lancé une exception InvalidDirectory pour les chemins Linux.

(RenderType = "BinaryStreaming")

<asp:Chart ID="ChartDIN277" runat="server" Width="500" Height="200" RenderType="BinaryStreaming">
        <Series>
             <asp:Series ChartArea="ChartArea1" ChartType="Pie" 
                Name="Area" 
                XValueMember="Label" 
                YValueMembers="Area" 
                IsVisibleInLegend="false"> 
                </asp:Series> 
        </Series>
        <ChartAreas>
            <asp:ChartArea Name="ChartArea1">
                <Area3DStyle Enable3D="True" LightStyle="Realistic" />
            </asp:ChartArea>
        </ChartAreas>
</asp:Chart>

Codebhind:

protected void Page_Load(object sender, EventArgs e)
        {
            FillChartFromDataBase();
        }



        public void FillChartFromDataBase()
        {
            System.Data.DataTable table = new System.Data.DataTable();
            table.Columns.Add("Area", typeof(double));
            table.Columns.Add("Label", typeof(string));

            System.Data.DataRow row = table.NewRow();
            row["Area"] = 791;
            row["Label"] = "HNF 1";
            table.Rows.Add(row);

            row = table.NewRow();
            row["Area"] = 978;
            row["Label"] = "HNF 2";
            table.Rows.Add(row);

            row = table.NewRow();
            row["Area"] = 1262;
            row["Label"] = "HNF 3";
            table.Rows.Add(row);

            row = table.NewRow();
            row["Area"] = 1650;
            row["Label"] = "HNF 4";
            table.Rows.Add(row);

            row = table.NewRow();
            row["Area"] = 2519;
            row["Label"] = "HNF 5";
            table.Rows.Add(row);

            row = table.NewRow();
            row["Area"] = 6071;
            row["Label"] = "HNF 6";
            table.Rows.Add(row);


            // Set chart custom palette
            ChartDIN277.Palette = System.Web.UI.DataVisualization.Charting.ChartColorPalette.None;

            //ChartDIN277.PaletteCustomColors = New System.Drawing.Color() {System.Drawing.Color.Red, System.Drawing.Color.Blue}
            ChartDIN277.PaletteCustomColors = COR.Design.ColorPalette.Generate(System.Drawing.Color.ForestGreen, table.Rows.Count - 1);

            // http://student.csdn.net/space.php?uid=383581&do=blog&id=32768
            //ChartDIN277.Palette = System.Web.UI.DataVisualization.Charting.ChartColorPalette.None; 
            //ChartDIN277.PaletteCustomColors = new Color[] { System.Drawing.Color.Red, System.Drawing.Color.Blue};
            //// Hide all series empty data point by making them transparent
            //Chart.Series[0].EmptyPointStyle.Color = Color.Transparent; 
            //// Set color for the whole series
            //Chart.Series[0].Color = Color.Green;

            //// Set color of a single data point
            //Chart.Series[0].Points[5].Color = Color.Red;

            this.ChartDIN277.DataSource = table;
            this.ChartDIN277.DataBind();
        }




ou créer un gestionnaire ashx, comme ceci

Imports System.Web
Imports System.Web.Services

Public Class ChartCreator
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        context.Response.ContentType = "image/jpeg"

        Dim yValues As Double() = {10, 27.5, 7, 12, 45.5}
        Dim xNames As String() = {"Mike", "John", "William", "George", "Alex"}


        Dim mychart As System.Web.UI.DataVisualization.Charting.Chart
        mychart = New System.Web.UI.DataVisualization.Charting.Chart
        Dim mychartarea As New System.Web.UI.DataVisualization.Charting.ChartArea()
        mychartarea.Name = "ChartArea1"
        mychartarea.BackColor = Drawing.Color.Transparent

        mychart.ChartAreas.Add(mychartarea)

        Dim myseries As New System.Web.UI.DataVisualization.Charting.Series()
        myseries.ChartArea = mychartarea.Name
        myseries.ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Pie
        myseries.Name = "Series1"

        mychart.Series.Add(myseries)
        mychart.BackColor = Drawing.Color.Transparent

        mychart.Series(0).Points.DataBindXY(xNames, yValues)
        mychart.Series(0).Points.DataBindXY(xNames, yValues)


        ' http://msdn.Microsoft.com/en-us/library/system.web.ui.datavisualization.charting.rendertype.aspx
        ' ImageTag, BinaryStreaming, ImageMap
        ' mychart.RenderType = System.Web.UI.DataVisualization.Charting.RenderType.BinaryStreaming

        mychart.ImageType = System.Web.UI.DataVisualization.Charting.ChartImageFormat.Png


        'mychart.SaveImage(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "mychart.png"))
        mychart.SaveImage(context.Response.OutputStream)


        'getResizedImage(context.Request.PhysicalPath,Width,Height);
        'context.Response.OutputStream
        context.Response.End()

    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class
0
Stefan Steiger

Créez simplement un dossier avec le nom 'TempImageFiles' dans le lecteur C.

0
Lokesh