• 问题:部署到iis上后Chart图片不显示;结果:使用webchart过程中遇到的一些问题


    使用webchart过程中遇到的一些问题

    2013年04月30日 ⁄ 综合 ⁄ 共 4874字 ⁄ 字号 ⁄ 评论关闭
     

    安装条件:
    1、操作系统如果是2003的,那么需要到sp2补丁
    2、framework需要3.5的,而且需要打sp1补丁先。
    4、先执行mschart.exe文件,这个是图表控件的语言包。
    3、接着执行MSChartLP_chs.exe,这个是图表控件的安装文件。
    5、接着执行mschart_visualstudioaddon.exe,这个是把图表控件作为vs的附加工具。

    常见问题:

    1、从工具箱拖放图表控件后,但老是认不出这个控件。首先要检查一些你该项目的编译选项,看下是不是使用3.5的选项。

    2、执行页面时,提示:Error executing child request for ChartImg.axd。

    chart控件的ImageStorageMode有两个选项:UseHttpHandler和UseImageLocation两个选项。这两个 选项都可以,但是,如果是使用UseHttpHandler的话,web.config中图表的相关配置要正确。使用UseImangeLocation 的话,会在文件系统中产生很多的图片文件。 安装正常的话,第一次从工具箱中拖放图表控件到页面时,会自动将该控件相关的配置添加在web.config文件中,包括一下配置:

    ...
    <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>

    3、使用handler的方式,配置也跟上面的一样,但是执行时,还是报:Error executing child request for ChartImg.axd。这时候不妨将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" />

    修改为:

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

    即在verb中多加了POST动作。

    4、在开发机时使用handler的方式,一切ok,图形都能够出来,但是一旦部署到iis上,再访问的话,就提示:图表处理程序配置 [c:/TempImageFiles/] 中的临时目录无效。解决办法:

    把配置文件中<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:/TempImageFiles/;" />

    中的dir属性去掉就ok了。

    参考文章

    http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/thread/1dc4b352-c9a5-49dc-8f35-9b176509faa1/#page:1

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lastbeachhead/archive/2009/02/16/3896804.aspx

    .NET 3.5中MSChart组件的ImageLocation属性含义 收藏
    在.NET程序/网站中如果要生成统计图表/图形,以 前可以采用OWC(Office Web Components),如OfficeXP组件OWC10、Office2003组件OWC11。OWC采用COM-DLL方式的调用接口,但主要缺憾 是生成的图片不够美观,不够“现代”。

    现在,随着.NET 3.5的发布,其引入了新的MSChart组件,当然,已经彻底的.NET化了。

    一、要使用这个新的图形组件,需要.NET 3.5 SP1环境。
    下载安装以下文件,分别是组件安装包、中文语言包、VS插件。
    MSChart.exe
    MSChartLP_chs.exe
    MSChart_VisualStudioAddOn.exe
    还有官方的文档,但目前是英文的。

    二、言归正传,现在来搞清楚ImageLocation属性的意思。
    Chart.ImageLocation
    名称空间:System.Web.UI.DataVisualization.Charting
    程序集:System.Web.DataVisualization(system.web.datavisualization.dll)
    在VS2008中,其默认值为:ChartPic_#SEQ(300,3)
    这个好像不太好理解啊:(
    好吧,先看几个关联属性吧

    1、Chart.RenderType
    此属性决定MSChart生成的图形以何种方式送到客户端,有三种:
    ImageTag,图形在服务端保存为临时文件,并将临时文件的URL作为HTML中<IMG>标签的SRC属性值。而此临时文件的URL规则及临时文件如何生成可由ImageLocation属性确定。
    BinaryStreaming,不在服务端生成图形文件,<IMG>标签的SRC属性值将指向另一个负责生成图形的.aspx页面。
    ImageMap,不显示实际的图形,仅创建图片热区(image map)。
    默认值是ImageTag,就是会在服务端生成临时文件。

    2、Chart.ImageStorageMode
    此属性决定生成图形的存储方式,有两个选项:
    UseHttpHandler,默认值,由HTTP处理程序存储图形文件到内存或文件。但生成的文件客户端是不能够直接能过URL访问到的,<IMG>标签的SRC属性值形如:
    ChartImg.axd?i=chart_67fdbfec448349e686916b97f1351e90_0.png&amp;g=f96eecccd0334d70b8c9b0702894182b
    并不指向服务端一个物理存储位置。
    UseImageLocation,作为临时文件存储在服务端指定位置。在客户端可以通过URL直接获取到图片。可进一步指定图片存储目录位置。图片文件名可以是随机性的也可以是固定的。

    3、Chart.ImageType
    生成图形文件的格式,可以是BMG、JPEG、PNG、EMF。

    现在回到Chart.ImageLocation,其实在上面已经提到了它的作用,就是决定图形临时文件的URL规则及临时文件如何生成。
    (1)、这个属性只有在Chart.ImageStorageMode=UseImageLocation才有效。
    (2)、 当Chart.RenderType=ImageTag时,图形文件生成后会在服务端保存。文件格式和扩展名由Chart.ImageType指定。而文 件名则可以是静态不变或动态变化的。静态就是使用一个固定名称,动态则使用一个随机名称,可以通过“#”标记来选择使用GUID或指定数字序列来确定一个 唯一的文件命名。
    (3)、默认值ChartPic_#SEQ(300,3)的含义是
    (4)、ImageLocation命名举例,假设Chart.ImageType=Png
    属性值                生成图形文件URL              
    ----------------------------------------------------------------
    ChartPic_#SEQ(300,3)  ChartPic_000003.png?d155074d-2120-49db-a95c-6a4a61911315           
    ChartPic              ChartPic.png?27194803-a8a9-4c3e-81a7-5534a279dbe0 
    ChartPic#NOGUIDPARAM  ChartPic.png
    (5)、默认值ChartPic_#SEQ(300,3)说明
    ChartPic_是前缀,#SEQ是数字序列,300表示最多允许保存300个文件,3代表3秒种,表示向事件日志中写入警告信息的时间限制。

    三、web.config关联配置项
    只有当Chart.ImageStorageMode=UseHttpHandler时,web.config中的配置才会生效。即指定由HTTP处理程序来存储图形文件时,web.config中的配置才会生效。
    例如:
    <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:/TempImageFiles/;deleteAfterServicing=false; webDevServerUseConfigSettings=false" />
    显然,其中c:/TempImageFiles/就是HTTP处理程序来存储图形文件的目录。
    deleteAfterServicing,在图片被浏览器成功下功下载后,确定服务器上图片是否删除,默认值为false。
    但请注意,如果不指定deleteAfterServicing,图片是不会被存储为文件的,应当只是暂存在内存中。
    webDevServerUseConfigSettings,当在VS开发服务器中,即运行在完全信任级别(full trust level)环境时,决定生成的图片是否被保存在内存中。

    四、注意文件夹的权限
    只要在服务端生成图形文件,无论存储在哪个目录下,ASP.NET帐户都需要拥有该目录的写入权限。

    参考:
    1、MSChart(.NET 3.5)官方文档。

  • 相关阅读:
    《将博客搬至CSDN》
    选课系统
    ATM_购物车
    python基础 面向对象编程
    python 基础 模块
    python基础 函数基础 模块:总复习
    第三篇:操作系统基础
    浅谈红黑树
    浅谈B和B+树
    第二篇:网络基础
  • 原文地址:https://www.cnblogs.com/longphui/p/4767119.html
Copyright © 2020-2023  润新知