2014年6月29日 星期日

[ASP.NET][Microsoft Chart Controls] 發生 執行 ChartImg.axd 的子要求時發生錯誤。


Reference:http://www.dotblogs.com.tw/davis/archive/2009/12/07/12320.aspx


Microsoft Chart Controls 好像出來滿久了,不過一直沒有機會用,
當然也有去準備了一下 ASP.NET 3.5 圖表與實務案例模組大全-使用VC# 這本書,
不過到現在都還沒有機會去翻閱啊!
今天剛好有同事用來產生一些報表,幫他掛到SERVER上去執行,
但是卻發生了錯誤,出現 『執行 ChartImg.axd 的子要求時發生錯誤。』
但是他說在本機上面執行是OK的~~ 這就神了!
Orz... 這真是一個難懂的錯誤訊息啊!堆疊也又臭又長 ... 看不懂! >"< (要找機會來學學看堆疊了 )
這時後就請google大神給我一些幫助了!找到了瓶水相逢.Net 的網頁,真是佛心來的! :D
對照了一下自己的 web.config ,該有的都有 ... 而且似乎也是控制項會自己產生那些項目,
這就怪了 ... 因為執行老是錯誤!不過在繼續往下看討論的時候 ... 看到了 maple 的回應,
重點就在下面這一行,
1<httpHandlers>
2    ...
3    <add path="ChartImg.axd" verb="GET,HEAD"
4      type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler,
5      System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral,
6      PublicKeyToken=31bf3856ad364e35" validate="false" />
7    ...
8</httpHandlers>
要再 verb="GET,HEAD" 這個屬性質中加入 POST ,變成 verb="POST,GET,HEAD"
之後就可以正常工作了! YA~~
原來這麼簡單!不過 ... Microsoft Chart Controls 為何沒有選項可以選擇呢?



另外在使用上一開始會遇到的問題應該就是下面這個錯誤吧!
Invalid temp directory in chart handler configuration [C:\TempImageFiles\].
原來 Chart Controls 還需要一個暫存的目錄,
一開始還真的傻傻的在 C:\ 底下建立一個 TempImageFiles 目錄,然後設定成 Everyone 都可以修改,
但是看完 瓶水相逢.Net 的文章後,就改用 url 的方式,
這樣也比較安全,對於未來移植上也比較方便!
只要在web.config設定檔中找到下列這行設定,
1<appSettings>
2    ...
3    <add key="ChartImageHandler" value="storage=file;timeout=20;
4            dir=C:\TempImages\;" />
5    ...
6</appSettings>
把  dir=C:\TempImages\ 這個設定值改成 url=~\TempImages ,
這樣TempImages這個目錄就會和網頁在一起了,當然別忘了要在網頁的目錄下建立一個 TempImages 目錄!XD ...

沒有留言:

張貼留言