webentwicklung-frage-antwort-db.com.de

asp.net:Ungültiges temporäres Verzeichnis in der Diagramm-Handler-Konfiguration [c:\TempImageFiles \]

Ich erhalte diese Fehlermeldung Invalid temp directory in chart handler configuration [c:\TempImageFiles\]. Während der Code ausgeführt wird.

Anfangs bekam ich No http handler was found for request type ‘GET’ error, den ich durch Verweis auf no http handler gelöst habe.

Aber jetzt erhalte ich den obigen Fehler. Die Details des Fehlers sind 

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.

Die stackTrace dieses Fehlers

[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

Kann mir jemand sagen, wie ich dieses Problem lösen kann ... Soll ich ein temporäres Verzeichnis manuell erstellen oder was soll ich tun?.


Hallo smarx. Ich überprüfe es .. Sie baten mich, umzuziehen 

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

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

in der Web-Konfigurationsdatei ...

Ich habe diese Zeile jedoch nicht in meiner Web-Konfiguration

Ich habe nur das zum Definieren des Diagramms 

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

Was sollte ich jetzt tun....

34
veda

Sie müssen ein temporäres Verzeichnis verwenden, das sich in der Ordnerhierarchie Ihrer Webanwendung befindet. In Windows Azure haben Sie keinen Zugriff auf c:\TempImages, sodass dies nicht funktioniert.

Ich habe hier ein Beispiel für ASP.Net-Diagramme in Windows Azure erstellt: http://code.msdn.Microsoft.com/azurecharts

Sie können den Dateispeicher weiterhin für die temporären Bilder verwenden:

Wenn Sie das Beispiel nicht herunterladen möchten, führen Sie die folgenden Schritte aus, damit es funktioniert:

  1. Erstellen Sie in Ihrer Projektmappe einen Ordner (z. B. TempImages).
  2. Fügen Sie diesem Ordner eine Datei (temp.txt oder was auch immer) hinzu. Die Entwickler-Tools scheinen keine leeren Verzeichnisse zu veröffentlichen.
  3. Stellen Sie die Bildposition Ihres Diagramms auf:

    ImageLocation="~/TempImages/ChartPic_#SEQ(300,3)"

  4. Fügen Sie Folgendes zu appSettings in Ihrer web.config hinzu:

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

  5. Stellen Sie sicher, dass sich Folgendes in system.web/assemblies befindet:

    <add Assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

  6. Stellen Sie sicher, dass sich Folgendes in system.web/httpHandlers befindet:
    <add path="ChartImg.axd" verb="GET,HEAD" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>

  7. Stellen Sie sicher, dass sich Folgendes in system.webServer/handlers befindet
    <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

Der Code, den ich auf code.msdn.com hochgeladen habe, sollte als Beispiel ausreichen.

50
Dan Gartner

versuchen Sie, diesen Schlüssel zu Ihrer web.config hinzuzufügen

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

anstelle der Standardeinstellung:

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

Wenn Sie die folgende Zeile ändern 

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

zu

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

funktioniert nicht, dann ändern Sie den Wert des Attributs "storage = file;" zu "Speicher = Speicher"; Es wird sicherlich funktionieren, da Sie jetzt Speicher anstelle von Datei verwenden.

11
Chaman Saini

Die Zeit schreitet weiter voran und die Menschen haben immer noch Empfehlungen. Ich bin auf dieses Problem während einer Migration gestoßen, also dachte ich, ich würde meine zwei Cent hinzufügen.

Warum es im Dateisystem speichern und nicht einfach im Speicher aufbewahren?

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

Wenn das Dateisystem in Azure ein Problem darstellt, verwenden Sie es nicht.

5
Ian

Ich hatte das gleiche Problem. Mein Problem war, dass mein Provider über spezielle Ordner mit Schreibrechten verfügte. Daher habe ich den Ordner TempImagesFile in seinen Standardordner geändert, und es funktionierte.

In meinem Fall wurde der Ordner mit Schreibrechten als Upload bezeichnet

web.config bearbeitet:

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

Hoffe das kann auch anderen helfen;)

4
Kenni

Mach die folgenden

1) Fügen Sie den folgenden Schlüssel in web.config hinzu oder bearbeiten Sie ihn.

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

2) Geben Sie IIS_User Schreibzugriff auf dieses Verzeichnis. Führen Sie dazu die folgenden Schritte aus:

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.

Jetzt haben Sie das Verzeichnis festgelegt und Schreibberechtigung für IIS erteilt, um temporäre Bilddateien in diesen Ordner zu schreiben.

Es sollte jetzt klappen.

4
Imran Rizvi
1
smarx

Aktualisieren Sie Ihre App-Einstellung darauf und prüfen Sie, ob dadurch das Problem behoben wird

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

1
javidg

Sie können das temporäre Zwischenspeichern von Bildern umgehen, indem Sie BinaryStreaming verwenden. 
Google sollte den Rest erledigen. 
Es funktionierte für mich unter Linux, wo es eine InvalidDirectory-Ausnahme für Linux-Pfade gab.

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

Codebehind:

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();
        }




oder erstellen Sie einen Ashx-Handler wie folgt

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

Erstellen Sie einfach einen Ordner mit dem Namen 'TempImageFiles' im Laufwerk C:.

0
Lokesh