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
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....
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:
TempImages
).temp.txt
oder was auch immer) hinzu. Die Entwickler-Tools scheinen keine leeren Verzeichnisse zu veröffentlichen.Stellen Sie die Bildposition Ihres Diagramms auf:
ImageLocation="~/TempImages/ChartPic_#SEQ(300,3)"
Fügen Sie Folgendes zu appSettings in Ihrer web.config hinzu:
<add key="ChartImageHandler" value="Storage=file;Timeout=20;Url=~/tempImages/;"/>
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"/>
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"/>
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.
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\;" />
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.
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.
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;)
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.
Sehen Sie sich diese Antwort im Windows Azure-Forum an: http://social.msdn.Microsoft.com/Forums/en-US/MSWinWebChart/thread/92238582-9445-4d15-a5a7-5f24fd4bf646/ .
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>
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
Erstellen Sie einfach einen Ordner mit dem Namen 'TempImageFiles' im Laufwerk C:.