2011-10-28 151 views
7

我有一個應用程序,嚴重依賴圖表和目前圖表將在ASP.Net開發服務器工作,但是當我嘗試發佈到我的服務器(Win 2008 Server R2,IIS 7),圖表不顯示。ASP.NET製圖控制不在生產服務器上工作

使用Firebug,我可以看到對ChartImg.axd的調用返回一個404,並且我得到的只是IE中的一個空白圖像保存器,或者Firefox中沒有任何內容。到目前爲止,我已經搜索了大約3或4個小時,並且嘗試了幾乎所有的建議,但似乎沒有任何工作。

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

我的web.config

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

沒有人有我要去哪裏錯把這個從我的服務器上工作的任何想法?

+0

ýü沒有使用[融合圖表](http://www.fusioncharts.com/free/),這是真棒和自由。 – Bastardo

+0

@bastardo現在不用了http://www.fusioncharts.com/goodies/fusioncharts-free/ – Zerotoinfinity

回答

5
運行時

我找到了我的問題的答案,但我相信我的問題主要來自於我的代碼如何運行。

一旦我爲我的ChartImageHandler設置了privateImages=false appSettings,我的圖像沒有問題,使用ImageLocation與文件存儲或HttpHandler與內存存儲。

我看了看上市here,並意識到,我的代碼具有以下的NONE:

  • 認證
  • 的SessionID
  • AnonymousID

所以privateImages=true隱含的默認設置是阻止我下載我的圖像。當我設置privateImages=false時,我沒有問題,圖表正常工作。我將我的應用程序設置爲使用Windows身份驗證,並設置privateImages=true,我的圖表現在使用圖像位置設置或HttpHandler設置生成。

希望這是有幫助的。我知道我花了很長時間挖掘並且無處可逃。

1

這似乎是安全/許可問題。是否將圖表保存到本地文件夾,然後爲該文件夾的IIS用戶和/或網絡服務用戶分配寫入權限。

+0

雖然我試圖不使用圖片位置,但我確實爲我的c:\ TempImageFiles \文件夾提供了網絡服務修改權限,並且圖像確實被放置在文件夾中,這導致我相信它按預期工作,但它們不會出現在我的應用程序中。這樣做時,我似乎仍然遇到404錯誤。 – Adam

+0

嘗試在你的IIS文件夾下創建'tempimagefile'文件夾,並嘗試直接從網頁上訪問,如'www.yourdomain.com/Tempimagefile/char.jpg',看看它是否有效。然後在你的網頁上使用這個位置。 – dpac

+0

或者,在應用程序設置中更改ChartImageHandler規格以在內存中而不是在文件中創建映像。 – AgapwIesu

0

您的網絡服務器上安裝Microsoft圖表控件或嘗試這個辦法:

ASP.Net Chart Control On Shared Hosting Environment

還要檢查HttpHandler的是註冊在system.webServer在你的web.config IIS 7下

+0

我相信Chart Controls是內置於.NET 4.0 Framework中的。處理程序出現在IIS管理器的處理程序映射下的應用程序列表中 – Adam

3

這個配置適用於我。您需要使用內存作爲存儲。

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

我意識到這是一箇舊帖子,但是你能告訴我在哪裏插入了上面的代碼行嗎?謝謝。 – htm11h

+0

部分 –

+0

的App.Config文件中,我認爲這是真正的答案。問題似乎是,如果您使用其默認值(「文件」)離開存儲,則處理程序會嘗試創建一個文件並將其提供給客戶端。如果用戶沒有授權在該char image處理程序應用程序設置中指定的服務器位置上創建文件,則整個事件都會失敗。但是我們可能想要的是服務器在內存中創建映像,並從那裏將其發送給客戶端。不需要創建一個涉及文件授權問題的物理文件。 – AgapwIesu

0
<controls> 
     <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" 
      assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </controls> 

試試這個:更改版本= 4.0.0.0到版本= 3.5.0.0

+0

這隻適用於如果您使用.Net 3.5不是嗎? –

0

試試這個它是在網絡的情況下得到解決。配置的運行時錯誤

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

/>

相關問題