调用Web服务时出现“Out of memory”异常

时间:2009-01-21 17:01:11

标签: c# asp.net web-services

我有一个ASP.NET Web应用程序,它调用.NET DLL,后者又调用Web服务。 Web服务调用正在抛出异常:

  

无法生成临时课程   (结果= 1)。错误CS0001:内部   编译器错误(0xc00000fd)错误   CS0003:内存不足

     

Stack Trace:at   System.Xml.Serialization.Compiler.Compile(大会   parent,String ns,   XmlSerializerCompilerParameters   xmlParameters,证据证据)
  在   System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping []   xmlMappings,Type [] types,String   defaultNamespace,证据证据,   XmlSerializerCompilerParameters   参数,装配装配,   Hashtable程序集)   System.Xml.Serialization.TempAssembly..ctor(XmlMapping []   xmlMappings,Type [] types,String   defaultNamespace,String location,   证据证据)   System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping []   映射,类型类型)at   System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping []   映射,类型类型)at   System.Web.Services.Protocols.SoapClientType..ctor(类型   输入)   System.Web.Services.Protocols.SoapHttpClientProtocol..ctor()

我应该提一下,这是我第一次在这台PC上执行这段特殊代码(我最近做了一次Windows重新格式化/重新安装) - 这让我觉得这是环境问题(同一个应用程序)在我们的测试和生产服务器上运行良好)。但我对这个事业感到难过。


回答后续问题的其他一些细节:

  • 这是一台真正的PC(不是VM)。
  • 我在IIS 7上运行.NET 3.5。我们的生产服务器是IIS 6,但它之前在IIS 7上运行正常。
  • PC有2 GB的RAM,有很多免费的。
  • 我没有更改任何machine.config设置,也没有更改任何与流程模型,编译,内存使用等相关的web.config设置。
  • 本地IIS_IUSRS组具有“Temporary ASP.NET Files”文件夹的读/写权限。
  • 我检查了应用程序池设置:私有内存和虚拟内存都设置为0(无限制)。

工作进程的内存使用情况:

  • 我回收了工作进程以获得一个干净的平板,然后点击应用程序中的ASP.NET页面...任务管理器显示使用了22 MB。
  • 然后,我点击了进行网络服务调用的事件,内存使用率达到约150 MB,关闭,然后我得到例外。

3 个答案:

答案 0 :(得分:1)

感谢您添加更多详细信息。

看一下这个链接:http://support.microsoft.com/?kbid=908158
它与您遇到的问题类似。

建议如下: 要解决此问题,请在%windir%\ Temp文件夹中为用户帐户授予“列出文件夹内容”和“读取”权限。

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

建议:
要避免此问题,请将Temp文件夹的读/写权限提供给ASPNET帐户。当ASP.NET Web服务处理WebMethods时,最常用于访问系统Temp文件夹的标识是本地ASPNET帐户,该帐户是运行ASP.NET应用程序的默认帐户。

但是,如果您已将应用程序配置为在其Web.config文件中使用模拟,则该线程还可以使用任何调用方的标识。如果是这种情况,所有潜在的呼叫标识必须具有对Temp文件夹的读/写权限。可能的呼叫标识是Internet信息服务(IIS)应用程序的匿名帐户(通常是ISUR_xxx帐户)。该线程还可以使用IWAM_xxx帐户或NETWORK SERVICE。

答案 1 :(得分:1)

嗯,我不确定为什么这有效(这令人沮丧),但我确实提出了一些建议......

我之前安装的Windows是32位,但是当我最近重建我的PC时,我使用的是64位版本。因此,我将IIS中应用程序池中的“启用32位应用程序”设置更改为“True”,现在一切似乎都正常。

DLL和网站本身被配置为编译为“任何CPU”,因此它们不应该在Win64上造成任何问题。并且“内存不足”错误仍然有点令人困惑(并且无益)。如果有人有任何想法,你会得到“接受”的分数。

答案 2 :(得分:0)

它正在尝试编译,它是否需要可写访问某些临时目录。