【问题标题】:ASP.NET Charting Control not working on production serverASP.NET Charting Control 在生产服务器上不起作用
【发布时间】:2011-10-28 19:20:40
【问题描述】:

我有一个严重依赖图表的应用程序,目前图表可以在 ASP.Net 开发服务器中运行,但是当我尝试发布到我的服务器(Win 2008 Server R2、IIS 7)时,图表不能出现。

使用 Firebug,我可以看到对 ChartImg.axd 的调用返回 404,而我得到的只是 IE 中的空白图像持有者,或者在 Firefox 中什么都没有。到目前为止,我已经搜索了大约 3 或 4 个小时,并且几乎尝试了所有推荐的方法,但似乎没有任何效果。

我想使用 memory/HttpImageHandler,而不是 ImageLocation 配置。

我的网络配置

    <appSettings>
    <!--<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />-->
    <add key="ChartImageHandler" value="storage=memory;timeout=20;deleteAfterServicing=false" />
  </appSettings>
  <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=31bf3856ad364e35" />
    </handlers>
  </system.webServer>
  <system.web>
    <httpHandlers>
      <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" />
    </httpHandlers>
    <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
          assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </controls>
    </pages>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </assemblies>
    </compilation>
    <customErrors mode="Off"/>
  </system.web>

有没有人知道我会在哪里出错以阻止它在我的服务器上运行?

【问题讨论】:

标签: asp.net mschart


【解决方案1】:

我找到了问题的答案,但我相信我的问题具体源于我的代码运行方式。

一旦我在 appSettings 下为 ChartImageHandler 设置了privateImages=false,我的图像就没有问题了,使用带有文件存储的 ImageLocation 或带有内存存储的 HttpHandler。

我查看了列表 here 并意识到我的代码没有以下内容:

  • 身份验证
  • 会话ID
  • 匿名ID

所以privateImages=true 的隐式默认设置阻止了我下载我的图像。当我设置privateImages=false 时,我没有任何问题,并且图表工作正常。我将我的应用程序设置为使用 Windows 身份验证,并设置 privateImages=true,现在我的图表正在使用 Image Location 设置或 HttpHandler 设置生成。

希望这会有所帮助。我知道我花了很长时间四处挖掘却一无所获。

【讨论】:

    【解决方案2】:

    此配置对我有用。你需要使用内存作为存储。

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

    【讨论】:

    • 我意识到这是一个有点旧的帖子,但是你能告诉我你在哪里插入了上面的代码行吗?谢谢。
    • 部分的 App.Config 文件中
    • 我认为这是真正的答案。问题似乎是,如果您将存储保留为默认值(“文件”),则处理程序会尝试创建一个文件并将其提供给客户端。如果用户无权在该字符图像处理程序应用程序设置中指定的服务器位置创建文件,那么整个事情都会失败。但是我们可能想要的是服务器在内存中创建图像并从那里将其提供给客户端。无需创建涉及文件授权问题的物理文件。
    【解决方案3】:

    这似乎是安全/权限问题。您是否将图表保存到本地文件夹,然后为该文件夹的 IIS 用户和/或网络服务用户分配写入权限。

    【讨论】:

    • 虽然我试图不使用图像位置,但我确实为我的 c:\TempImageFiles\ 文件夹授予了网络服务修改权限,并且图像确实被放置在该文件夹中,这让我相信它按预期工作,但他们没有提出我的申请。执行此操作时,我似乎仍然收到 404 错误。
    • 尝试在您的 IIS 文件夹下创建“tempimagefile”文件夹,并尝试直接从网络访问它,例如“www.yourdomain.com/Tempimagefile/char.jpg”,看看它是否有效。然后在您的网页中使用此位置。
    • 或者,更改应用设置中的 ChartImageHandler 规范以在内存中而不是在文件中创建图像。
    【解决方案4】:

    在您的网络服务器上安装 Microsoft Chart Controls 或试试这个:

    ASP.Net Chart Control On Shared Hosting Environment

    在 IIS 7 下运行时,还要检查 HttpHandler 是否已在 web.config 中的 system.webServer 中注册。

    【讨论】:

    • 我相信图表控件内置于 .NET 4.0 框架中。处理程序出现在 IIS 管理器的处理程序映射下的应用程序列表中
    【解决方案5】:
      <controls>
            <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
              assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </controls>
    

    试试这个:将 Version=4.0.0.0 更改为 Version=3.5.0.0

    【讨论】:

    • 这仅适用于您使用 .Net 3.5 的情况,不是吗?
    【解决方案6】:

    试试这个,在 web.config 运行时错误的情况下解决了

    <pre>
    <add key="ChartImageHandler" value="storage=memory;timeout=20;deleteAfterServicing=true;Url=~\temp\"
    

    />

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-20
      • 2017-02-18
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2020-05-20
      相关资源
      最近更新 更多