zoukankan      html  css  js  c++  java
  • 问题:部署到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)官方文档。

  • 相关阅读:
    什么是 bean 的自动装配?
    什么是 Spring 的内部 bean?
    什么是 Spring 的 MVC 框架?
    Spring AOP and AspectJ AOP 有什么区别?
    解释 JDBC 抽象和 DAO 模块?
    volatile 类型变量提供什么保证?
    一个 Spring Bean 定义 包含什么?
    什么是 Spring MVC 框架的控制器?
    使用 Spring 访问 Hibernate 的方法有哪些?
    什么是 Callable 和 Future?
  • 原文地址:https://www.cnblogs.com/longphui/p/4767119.html
Copyright © 2011-2022 走看看