无法使用IIS,MVC4,C#和COM实例化delphi编写的application.exe

Sim*_*mon 3 asp.net delphi com iis iis-8

我的Web应用程序是一个名为MyApplication.exe的桌面应用程序的Web界面.我的Web应用程序是用C#(MVC4)编写的,它通过COM-Objects与MyApplication.exe(用delphi编写)进行通信.

当16个客户端通过浏览器调用Web应用程序时,将在服务器上创建16个MyApplication.exe实例:

任务管理器

我的问题:如果客户端号17调用Web应用程序,我的事件日志中会出现以下异常:

"系统错误.代码:8.没有足够的存储空间来处理此命令."

进程资源管理器指示,工作进程w3wp.exe消耗约600 MB内存,但该机器有4 GB RAM.

注意:创建的实例将保存在会话(inProc)中.

我正在使用:

  1. MVC4
  2. ASP.NET CLR 4.0
  3. IIS 8
  4. Windows Server 2012 R2(也发生在Windows 8.1上)
  5. 4GB RAM

我尝试了以下事项:

  1. 使用COM-Objects通过VB脚本在本地创建实例.结果:我能够创建~50个MyApplication.exe实例,没有任何问题.

  2. 使用以下条目调整machine.config:

    processModel enable ="true"memoryLimit ="100"

结果:重新启动工作进程后,问题仍然存在.

Col*_*e W 5

根据用户运行的IIS,可能会出现非交​​互式桌面堆大小问题.我遇到了涉及Windows服务的这个问题.

当您运行测试应用程序时,您很可能在不同的用户下运行.您可以尝试在注册表中调整非交互式桌面堆大小,以查看它是否可以解决此问题:

以下内容来自KB 126962

若要更正此问题,请增加桌面堆的大小:运行注册表编辑器(Regedt32.exe).从HKEY_LOCAL_MACHINE子树,转到以下项:\ System\CurrentControlSet\Control\Session Manager\SubSystems选择Windows值.从"编辑"菜单中选择"字符串".增加SharedSection参数.

对于Windows NT:SharedSection使用以下格式指定系统和桌面堆:SharedSection = xxxx,yyyy在yyyy数后添加",256"或",512".

对于Windows 2000,Windows XP和Windows Server 2003:SharedSection使用以下格式指定系统和桌面堆:SharedSection = xxxx,yyyy,zzzz对于32位操作系统,将yyyy值增加到"12288"; 将zzzz值增加到"1024".对于64位操作系统,将yyyy值增加到"20480"; 将zzzz值增加到"1024".

这里也是一篇类似于windows vista/7 KB 947246的文章