c# - "Out of memory"Web 服务调用异常

标签 c# asp.net web-services

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

Unable to generate a temporary class (result=1). error CS0001: Internal compiler error (0xc00000fd) error CS0003: Out of memory

Stack Trace: at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) at System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping[] mappings, Type type) at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type) at System.Web.Services.Protocols.SoapClientType..ctor(Type type) at 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”文件夹具有读/写权限。
  • 我检查了应用程序池设置:私有(private)内存和虚拟内存都设置为 0(无限制)。

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

  • 我回收工作进程以获得一个干净的状态,然后点击应用程序中的 ASP.NET 页面...任务管理器显示已使用 22 MB。
  • 然后我触发了调用 Web 服务的事件,内存使用量猛增至大约 150 MB,然后趋于平稳,然后我得到了异常。

最佳答案

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

查看此链接: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。

关于c# - "Out of memory"Web 服务调用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/466089/

相关文章:

c# - ASP.Net:多次调用 Page_Load()

web-services - 使用Webservices查找两个邮政编码之间的距离?

web-services - POST xml 无效时更正 HTTP 状态代码?

c# - 应用程序关闭时的 Xamarin.Forms iOS PushNotification

c# - 与 LAN 上的应用程序通信

c# - 在 .NET 中跨语言访问名称区分大小写的成员

c# - 初始化 Nlog 事件日志目标时出现安全异常

c# - 在 C# 类中实例化泛型类型

C# ASP.NET : Dynamically constructing an url query string

php - 致命的 : unable to update url base from redirection