.NET 3.5 图表控件异常:执行 ChartImg.axd 的子请求时出错
Posted
技术标签:
【中文标题】.NET 3.5 图表控件异常:执行 ChartImg.axd 的子请求时出错【英文标题】:.NET 3.5 chart controls exception: Error executing child request for ChartImg.axd 【发布时间】:2010-09-23 02:26:30 【问题描述】:有人在使用从 Dundas 购买的新的免费图表控件 MS 时遇到此错误吗?
“执行 ChartImg.axd 的子请求时出错”
在 MSDN 论坛上,他们建议这是我的 web.config: MSDN forum post
到目前为止,这还没有解决问题。还有其他想法吗?
【问题讨论】:
【参考方案1】:我遇到了同样的问题:图表可以在一个页面上工作,但不能在下一个页面上工作。事实证明,如果图表在 POST(即回发)中首次初始化,则会引发错误,因为处理程序配置不正确。要解决此问题,请通过添加 POST 动词来修改用户 LaptopHeaven 在本主题中提到的 httpHandler 配置:
<add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />
我已经在 Scott Anderson 在本主题的开篇文章中提到的 MSDN 论坛帖子中对为什么会出现此错误进行了更全面的解释。
【讨论】:
这就是答案,让您在使用 MVC 时也将所有处理程序添加到最外层的 Web 配置中>。 【参考方案2】:我遇到了这个错误,但是通过向我的 web.config 文件的 system.web\httpHandler 部分添加一个元素来更正它。我添加了以下内容:
<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" />
【讨论】:
我应该被允许多次投票...完美的解决方案,非常感谢! 我的 web.config 中已经有该标签,但需要知道将其重新定位到哪里(system.web\httpHandlers)。谢谢。【参考方案3】:在 .NET 4.0 上,图表是内置的,但您仍可能需要在下面添加类似的标签:
<add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />
【讨论】:
【参考方案4】:尝试(不要忘记 ChartImageHandler 键中的路径)
<appSettings>
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>
<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" />
...
</httpHandlers>
<handlers>
...
<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" />
...
</handlers>
【讨论】:
【参考方案5】:另请注意,虽然将图表控件从工具箱拖到您的页面上应该会在 web.config 中创建必要的条目,但只有当您当时处于设计模式时才会发生这种情况。
如果您处于源模式并拖放,则不会发生。
此外,当您在设计模式下添加图表控件时,项目/类文件中必须进行某种形式的注册。因为如果您处于源代码模式并 dnd 图表控件,您将不会像上面那样在 web.config 中获得条目。如果您随后进入设计模式并从工具箱 dnd 进入页面,您将获得 web.config 中的条目。
但是,如果随后删除图表,您在设计模式下 dnd,即使您在 dnd 时页面上仍有其他图表控件,它也会擦除 web.config 中的条目(假设是单页站点) 'd 进入源模式。
所以不,你没有疯,只是不直观。 ;)
【讨论】:
【参考方案6】:我在 MSDN 论坛上发布了解决此问题的方法:
好吧,我仍然不知道为什么会出现异常,但我似乎找到了解决方法。我做了一个实验,将假定的有问题的 web.config 复制到一个新项目中,在该项目中我添加了一个新的 Web 表单和图表控件,并且图表控件使用“UseHttpHandler”选项渲染得很好。这让我相信实际上并不是 web.config 是我的问题,所以我回到原来的项目,并在另一个 Web 表单中添加了一个图表作为实验,它成功了!更令人惊讶的是,在那之后我去了有问题的页面,它也起作用了!然后我把新图表从另一页上取下来,检查了原来的有问题的页面,它又坏了。然后我发现如果我在有问题的页面之前的任何页面上放置一个图表控件,它会起作用,否则它会抛出异常。这些控件非常酷,虽然我没有问题找到另一个页面将其放在违规页面的路径中:)
这解决了问题,但如果有人有任何理论,我为什么会感兴趣......也许是一个错误?
【讨论】:
【参考方案7】:更多信息:
我也遇到了 web.config 问题,并通过确保当我将 Chart 控件拖放到页面上时未在代码编辑器中打开 web.config 来解决这个问题。如果 web.config 尚未打开,Visual Studio 2010 将进行适当的修改。
成功应用 web.config 问题后,我能够成功克服“执行子请求时出错”错误。
另外关于在 MVC 应用程序中的使用,我正在努力在我的 MVC 2 应用程序 (VS2010/.NET 4) 中实现这一点,并遇到了另一个问题。
页面调用 ChartImg.axd 导致 HTTP 404 错误。 (我使用 Fiddler 找到了这个。)
原来页面试图从 /MyController/ChartImg.axd 而不是 /ChartImg.axd(从根)访问处理程序。
我可以通过将此行添加到我的 Global.asax.cs 文件来解决问题:
routes.IgnoreRoute("controller/resource.axd/*pathInfo");
对于一些不得不求助于更改 Chart.ImageStorageMode 属性的用户来说,这可能是个问题。
【讨论】:
这确实是我的问题。我最初检查了 .axd 是否被忽略,奇怪的是,它是 ASP.NET MVC 项目的默认设置。但它没有路线的“controller”部分。在我添加你的之后,问题得到解决并呈现了我的图表。 @CarlHancke 很高兴它有帮助。【参考方案8】:通过在 webconfig 中添加 chatImageHandler 解决了这个问题。
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<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=31bf3856ad364e35"/>
</handlers>
</system.webServer>
更多详情: http://www.infinetsoft.com/Post/-Solved-Error-executing-child-request-for-ChartImg-axd/1164#.VyenrNJ97cs
【讨论】:
【参考方案9】:只是想指出,同样是权限问题,图片未找到错误。
为您的图片文件夹设置“允许修改”权限(默认情况下,您的网站运行所在的帐户为“C:\TempImageFiles”。
问题消失了。
【讨论】:
【参考方案10】:请在webconfig中添加
添加动词="GET,HEAD" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken =31bf3856ad364e35"
谢谢
巴桑特
【讨论】:
【参考方案11】:在 IIS 6.0 (Server 2003) 中,如果缺少 httpHandler,则会出现此错误(请参阅Previous Answer)
查看堆栈跟踪,似乎 IIS 6.0 假定将加载处理程序。它对语句执行 Execute 并吞下异常。在 IIS 6.0 中的 httpHandlers 下包含以下属性(如上所示)为我解决了这个问题。
<add path="ChartImg.axd" verb="GET,HEAD" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
请注意,我将版本从之前的答案更改为 4.0.0.0,并在 Server 2008 (IIS 7.0) 和 Server 2003 (IIS 6.0) 中进行了测试
【讨论】:
【参考方案12】:此问题的另一个原因可能是应用程序池设置为“经典”模式。我的处理程序配置正确,但我得到了同样的错误。
<add name="ChartImg" verb="*" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
一旦我将应用程序池切换到“集成”模式。图表控件开始正常工作。
【讨论】:
以上是关于.NET 3.5 图表控件异常:执行 ChartImg.axd 的子请求时出错的主要内容,如果未能解决你的问题,请参考以下文章