IIS 托管的 WCF 服务创建了数千个临时文件夹

Posted

技术标签:

【中文标题】IIS 托管的 WCF 服务创建了数千个临时文件夹【英文标题】:IIS hosted WCF service creates thousands of temp folders 【发布时间】:2012-09-07 19:22:09 【问题描述】:

我有一个 IIS 托管的 WCF 服务,昨天我发现在“临时 ASP.NET 文件”目录 (\234lkj\98734dc\assembly \tmp)。这些文件夹中的每一个都有服务所需的 dll 之一,它只需要 6 个,因此每个 dll 在不同的文件夹上被复制了大约 11,000 次。无论它们是否更改,IIS 都会从 bin 文件夹中复制它们吗?这是正常行为吗?是否有配置设置可以防止 IIS(或任何正在执行此操作的进程)不必要地复制 dll?

【问题讨论】:

【参考方案1】:

.NET 使用 temp 文件夹来 JIT 编译来自其他服务的引用。 .NET 需要一个地方来创建文件,然后编译此代码以最终使用该服务。现在,您看到这么多文件的原因可能与托管站点的应用程序池的设置方式有关。如果您查看应用程序池的高级设置,请查看分配了多少工作进程。每个工作进程都可以与自己的内存一起存在,因此如果多个服务引用比比皆是,这将需要对多个文件夹进行 JIT 处理。此外,请检查以确保进程孤立未设置为打开。如果是这样,您的进程可能会留下文件,从而导致您看到的堆积。

【讨论】:

我正在使用 DefaultAppPool,其中最大工作进程 = 2 并且进程孤立->启用 = False。四天前我删除了所有临时文件夹,上次我检查时创建了大约 2,000 个新文件夹。想一想……为什么首先需要这些文件夹?我了解临时 asp.net 文件的作用,但在此服务中,所有内容都已编译,任何地方都没有源代码文件,它只是盲目地将 dll 从一个文件夹复制到另一个文件夹。出事了……

以上是关于IIS 托管的 WCF 服务创建了数千个临时文件夹的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 中托管 WCF 服务时协议映射错误

如何从 IIS 托管的 WCF 服务启动进程?

IIS 7 托管 WCF 服务使用域帐户作为应用程序池标识

使用 Windows 身份验证的 IIS 托管 WCF 服务和 SQL 查询

如何从服务“内部”的代码访问托管在 IIS 中的 WCF 服务的 web.config

从 Windows 应用程序访问托管在 IIS 上的 WCF 服务时出现问题