2009-01-21 101 views
2

我有一個調用.NET DLL的ASP.NET Web應用程序,該DLL調用Web服務。該Web服務調用引發異常:調用Web服務時出現「內存不足」異常

無法生成臨時類 (result = 1)。錯誤CS0001:內部 編譯器錯誤(0xc00000fd)錯誤 CS0003:內存不足

堆棧跟蹤:在 System.Xml.Serialization.Compiler.Compile(大會 父母,串NS, XmlSerializerCompilerParameters xmlParameters,證據證據)
在 System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping [] xmlMappings,類型[]類型,字符串 DefaultNamespace的,證據證據, XmlSerializerCompilerParameters 參數,裝配組件, 個哈希表組件)在 System.Xml.Serialization.TempAssembly..ctor(XmlMapping [] xmlMappings,在 System.Xml.Serialization.XmlSerializer.GetSerializersFromCache類型[]類型,字符串 DefaultNamespace的,字符串位置, 證據證據) (XmlMapping [] 映射,類型型)在 System.Xml.Serialization.XmlSerializer.FromMappings在 System.Web.Services.Protocols.SoapClientType..ctor(XmlMapping [] 映射,類型型)(類型 型)在 System.Web.Services.Protocols.SoapHttpClientProtocol.ctor()

我應該提一下,這是我第一次在這臺PC上執行這段代碼(我最近做了一次Windows重新格式化/重新安裝) - 這讓我覺得這是一個環境問題(相同的應用程序運行良好在我們的測試和生產服務器上)。但我很難理解這個原因。


一些額外的細節來回答後續問題:

  • 這是一個真正的PC(而不是VM)。
  • 我在IIS 7上運行.NET 3.5。我們的生產服務器是IIS 6,但它在IIS 7上正常工作。
  • 電腦有2 GB的RAM有大量的免費。
  • 我並沒有改變任何的machine.config設置,也沒有任何相關的流程模型,編譯,內存使用情況等
  • 的web.config設置本地IIS_IUSRS組具有讀取用於/寫權限「臨時ASP.NET文件」文件夾。
  • 我檢查了應用程序池設置:私有內存和虛擬內存都設置爲0(無限制)。工作進程的

內存使用:

  • 我回收工作進程得到一個乾淨的石板,然後在應用程序中打一個ASP.NET頁面...任務管理器顯示使用22 MB。
  • 然後我打了一個事件,使Web服務調用和內存使用率突然上升到大約150 MB,關閉,然後我得到了異常。
+0

您在Web服務調用中使用的類型的定義是什麼? – casperOne 2009-01-21 17:15:06

回答

1

嗯,我不知道確切爲什麼這個工作(這是令人沮喪的),但我沒有拿出東西...

我以前安裝的Windows是32位的,但是當我最近重建了我的電腦,我使用了64位版本。因此,我將IIS中應用程序池上的「啓用32位應用程序」設置更改爲「True」,現在一切似乎都正常。

該DLL和網站本身被配置爲「任何CPU」編譯,所以他們不應該在Win64上造成任何問題。而「內存不足」的錯誤仍然有點令人困惑(而且毫無幫助)。如果有人有任何想法,你會得到「接受」的觀點。

1

感謝您添加更多詳細信息。

看看這個鏈接:http://support.microsoft.com/?kbid=908158
它是類似於你遇到的問題。

它建議您採用以下方法: 要解決此問題,請向%windir%\ Temp文件夾授予用戶帳戶列表文件夾內容和讀取權限。

這一個:
http://club.workflowgen.com/scripts/club/publigen/content/templates/show.asp?P=53&L=EN

建議:
爲了避免這個問題,給讀/寫權限的的臨時文件夾ASPNET帳戶。當ASP.NET Web Services處理WebMethods時,最常用來訪問系統Temp文件夾的標識是本地ASPNET帳戶,該帳戶是運行ASP.NET應用程序的默認帳戶。

但是,如果您已將應用程序配置爲在其Web.config文件中使用模擬,則該線程還可以使用任何調用者的身份。如果是這種情況,所有潛在的呼叫身份必須具有Temp/Temp文件夾的讀/寫權限。可能的主叫身份是Internet信息服務(IIS)應用程序的匿名帳戶(通常是ISUR_xxx帳戶)。該線程也可能使用IWAM_xxx帳戶或網絡服務。

+0

感謝您的信息...該網站是使用模擬(指定特定用戶),但我已經將該用戶添加到本地IIS_IUSRS組,並賦予%windir%\ temp的組權限。 – 2009-01-21 21:52:36

0

它試圖編譯,是否需要對某個臨時目錄進行可寫訪問。

+0

是的,我想到了這一點,但它看起來像IIS_IUSRS組具有讀/寫「Temporary ASP.NET Files」文件夾的權限。無法想象它可能在哪裏進行編譯。 – 2009-01-21 19:14:48