programing

asp.net :차트 핸들러 구성 [c:\TempImageFiles\]

abcjava 2023. 4. 26. 22:52
반응형

asp.net :차트 핸들러 구성 [c:\TempImageFiles\]

는 이 오류를 ㅠㅠㅠㅠㅠㅠㅠㅠㅠInvalid temp directory in chart handler configuration [c:\TempImageFiles\].내 코드를 실행하는 동안.

처음에 나는 받고 있었습니다.No http handler was found for request type ‘GET’ error나는 그것을 http 핸들러가 아닌 것을 참조함으로써 해결했습니다.

하지만 지금 나는 위의 오류를 받고 있습니다. 오류의 세부사항은

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.

이 오류의 stackTrace

[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

이 문제를 해결하는 방법을 알려줄 수 있는 사람?임시 디렉토리를 수동으로 만들어야 하는지 아니면 어떻게 해야 하는지...


그의 스마트맥스, 확인해보니..그들은 나에게 옷을 갈아입으라고 했습니다.

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

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

웹 구성 파일에서...

하지만 웹 구성에 이 줄이 없습니다.

차트 정의용으로만 사용할 수 있습니다.

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

이제 어떻게 해야 할까요…

웹 응용프로그램의 폴더 계층 내에 있는 임시 디렉토리를 사용해야 합니다.Windows Azure에서는 c:에 액세스할 수 없습니다.\TempImages(템프 이미지)이므로 작동하지 않습니다.

저는 ASP의 빠른 샘플을 만들었습니다.Windows Azure에서 작동하는 넷 차트: http://code.msdn.microsoft.com/azurecharts

임시 이미지에는 파일 저장소를 계속 사용할 수 있습니다.

샘플을 다운로드하지 않으려면 다음 단계를 수행합니다.

  1. .TempImages예를 들어).
  2. 합니다.temp.txt이 폴더로 이동합니다.개발 도구가 빈 디렉터리를 게시하지 않는 것 같습니다.
  3. 차트의 이미지 위치를 다음으로 설정합니다.

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

  4. 웹.configappSettings에 다음을 추가합니다.

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

  5. system.web/assembly에 다음이 있는지 확인합니다.

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

  6. system.web/httpHandlers에 다음이 있는지 확인합니다.
    <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. 다음이 시스템에 있는지 확인합니다.웹 서버/핸들러
    <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"/>

예를 들어 제가 code.msdn.com 에 업로드한 코드로 충분할 것입니다.

이 키를 web.config에 추가하려고 합니다.

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

기본값 대신:

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

다음 라인을 변경하는 경우

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

로.

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

작동하지 않습니다. 그런 다음 "storage=file;" 특성 값을 "storage=memory;"로 변경합니다.당신은 지금 파일 대신 메모리를 사용하고 있기 때문에 확실히 작동할 것입니다.

시간은 여전히 진행되고 사람들은 여전히 추천을 받고 있습니다.저는 이주 중에 이 문제를 발견했습니다. 그래서 저는 2센트를 추가해야겠다고 생각했습니다.

메모리에만 저장하지 않고 파일 시스템에 저장하는 이유는 무엇입니까?

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

Azure에서 파일 시스템이 문제라면 사용하지 마십시오.

다음을 수행합니다.

web.config에서 다음 키를 추가하거나 편집합니다.

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

다음 작업을 수행하기 위해 IIS_User에게 이 디렉토리에 대한 쓰기 권한을 부여합니다.

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.

이제 디렉토리를 설정하고 IIS에 임시 이미지 파일을 이 폴더에 쓸 수 있는 쓰기 권한을 부여했습니다.

이제 될 거예요.

저도 같은 문제가 있었습니다. 제 문제는 공급자가 쓰기 권한이 있는 특수 폴더를 가지고 있다는 것이었습니다. 그래서 TempImagesFile 폴더를 기본 폴더로 변경했는데 작동했습니다.

제 경우에는 쓰기 권한이 있는 폴더를 업로드라고 했습니다.

web.config 편집:

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

이것이 다른 사람들에게도 도움이 되기를 바랍니다 ;)

앱 설정을 이것으로 업데이트하고 문제가 해결되는지 확인합니다.

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

Windows Azure 포럼에서 다음 답변을 확인하십시오. http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/thread/92238582-9445-4d15-a5a7-5f24fd4bf646/

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>

코드 배경:

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




또는 다음과 같은 asx 핸들러를 만듭니다.

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

C 드라이브에 'TempImageFiles'라는 이름의 폴더를 만들기만 하면 됩니다.

서버를 제어할 수 없거나 폴더 등에 대한 액세스 권한을 부여할 수 없기 때문에 환경에 구현해야 했던 솔루션은 다음과 같습니다.

또한 web.config에서 appSettings 키를 다음과 같이 변경했습니다.

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

하지만 우리가 다른 것을 했던 곳은 우리의 시스템이 다운된 곳이었습니다.web.config의 webServer/handlers 섹션입니다.다음을 수행했습니다.

    <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=<your application's public key token>" />
        </handlers>
    </system.webServer>

차트에 아무것도 표시되어 있지 않고 오류도 발생하지 않았기 때문에 우리는 이 경로로 가야만 했습니다.이것이 누군가에게 도움이 되기를 바랍니다 :)

언급URL : https://stackoverflow.com/questions/2660606/asp-netinvalid-temp-directory-in-chart-handler-configuration-c-tempimagefiles

반응형