2012-03-09 40 views
5

我有一個ASP.NET MVC項目,我需要動態生成一些PNG圖像。這很容易。我只是創建返回FileSreamResult對象的ActionResult。爲了生成圖像,我使用了System.Drawing中的類,比如Bitmap和Image。在本地機器和生產服務器上一切正常。但是當生產服務器上的IIS由於不活動而關閉我的應用程序池並重新啓動時,圖像生成開始失敗。在asp.net中奇怪的圖像生成錯誤

問題是在試圖圖像保存到流的代碼:

var imageStream = new MemoryStream(); 
    bmp.Save(imageStream, ImageFormat.Png); 

例外是:System.Runtime.InteropServices.ExternalException(0X80004005):在GDI +發生一般性錯誤。所以沒有太大的幫助。我嘗試了不同的解決方案,沒有任何幫助之後,我發現這個話題Alternatives to System.Drawing for use with ASP.NET?

這一主題的主要思想是:System.Drawing命名空間內

類不支持Windows或ASP.NET服務中使用。試圖從這些應用程序類型中使用這些類可能會產生意想不到的問題,例如服務性能下降和運行時異常。

所以我決定使用WPF類來生成圖像。我重寫了所有圖像生成代碼,但現在我在應用程序池重新啓動後出現另一個錯誤。異常: System.Runtime.InteropServices.COMException(0x88982F8A):來自HRESULT的異常:0x88982F8A。當我嘗試將PngBitmapEncoder保存爲流時,會發生這種情況

var stream = new MemoryStream(); 
encoder.Save(stream); 

也許任何人遇到此問題或者只是有什麼想法?

回答

0

我不能回答你的問題,但如果這只是因爲你的應用程序關閉,爲什麼不把它的空閒設置爲0(應用程序池 - >應用程序 - >高級選項),那麼它不會關閉。

這可能是最後的手段,如果你不能得到一個合適的答案。

1

下面是一個不能令人滿意的答案...

我得到了同樣的錯誤,當我第一次部署我的新形象生成功能。

我停止了相應的應用程序池,重新啓動它,它工作。