我在Windows Server 2008 R2 Standard的IIS 7上运行了一个经典的ASP应用程序。
当天突然没有任何代码更改时,它在实例化COM +组件时开始抛出以下错误,但工作正常:
MyObject = Server.CreateObject("MyCustomComponent.MyCustomObject")
服务器对象错误'ASP 0177:80004005'
Server.CreateObject失败
/path/script.asp,line xx
80004005
可能是什么问题?我做了一个互联网搜索,发现了几十个可能的答案,其中没有一个似乎与问题有任何关系。我知道我正在使用正确的对象名称 - 它刚刚工作了一段时间。什么也没有变!我花了差不多2个小时试图解决这个问题并且空洞。
答案 0 :(得分:10)
鉴于其潜在的各种原因,此错误可能很难排除故障。快速internet search揭示了大量的建议。
此处将可能的问题缩小到合理列表的关键方面是代码工作并且突然开始失败,没有任何代码更改。假设没有重大的IIS或COM配置更改,则排除了例如为组件使用了错误的类名或未正确注册的组件的可能性。相反,必须将注意力转向IIS和COM本身的某些配置,这些配置可能允许不一致的行为,而不会发生设置更改。
最终,问题归结为多个IIS站点和应用程序(每个都位于不同的IIS应用程序池中)使用相同的COM组件。这本身不是问题,除了COM组件被设置为允许一次最多访问1个应用程序池。
该页面工作了一段时间的原因是它成功地首先抓住了COM组件。如果有人访问它,则使用相同COM组件的其他站点/页面/应用程序池将失败。由于COM组件设置为在3分钟后释放,因此访问其他页面时有机会“抓住”它并防止它被用于正在测试的新页面。
以下是在Windows Server 2008中增加COM组件的应用程序池限制的详细说明:
转到“控制面板”>管理工具>组件服务。
在树中,浏览组件服务>我的电脑> COM +应用程序并找到您的自定义组件。
右键单击组件并获取“属性”。
On the Pooling& “Recyling属性页”选项卡,将“池大小”设置为大于1的数字,以匹配将从IIS或其他位置同时访问该组件的潜在应用程序池的数量。
再次尝试使用您的网页,然后再次发挥作用!