2010-08-02 43 views
2

在asp.net web服务中,我有一个静态数据集,可在第一次访问时加载数据(同步)。但是,当IIS回收应用程序池时,由于“集合已被修改;枚举操作可能无法执行”,因此引发异常。IIS回收会导致静态数据集访问错误

回收将启动新进程,这将创建新的静态数据集,旧工作进程中的请求将不会访问新的静态数据集,集群如何修改?或者这是可能的,旧的工作进程在请求结束前立即终止?

或者我明白回收过程错了吗? IIS不是启动新的工作进程,而是在同一个工作进程中启动新的AppDomain?新旧应用程序域共享相同的静态数据集?

回答

1

事实证明,这个错误不是由回收过程造成的。在启动过程中,同步过早地将数据集返回给稍后的请求/线程,而第一个请求/线程仍在填充它,导致“集合被修改”的异常。

就像往常一样,我在找抽屉里的钥匙,我相信它应该在,而钥匙完全放在抽屉的桌子上。有时候,我只是感到震惊,认为这是头脑而不是眼睛看到的。在这种情况下,在我发布这个问题后,我意识到我看到的是错误的东西,只是因为如果它是由回收过程引起的,我肯定有人应该已经发布了答案。

谢谢大家! Zhen