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
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....
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\;" />
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.
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.
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;)
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.
Découvrez cette réponse sur le forum Windows Azure: http://social.msdn.Microsoft.com/Forums/fr-MS/WebChart/thread/92238582-9445-4d15-a5a7-5f24fd4bf646/ .
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>
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
Créez simplement un dossier avec le nom 'TempImageFiles' dans le lecteur C.