如何在IIS实例中的所有应用程序/虚拟目录/版本之间共享Oracle连接池?
连接池由 .NET Framework 管理,并且每个连接字符串都是唯一的。因此,如果您使用完全相同的连接字符串(如果您使用 Windows 集成身份验证,则包括用户身份),它将共享连接池。
如果运行性能监视器,您可以添加计数器“.NET Data Provider for Oracle”并选择进程(例如 w3wp.exe)来监视连接池统计信息。
如果您有多个虚拟目录(子网站),它们可以共享相同的应用程序池(w3wp.exe 进程)。但是,根据我编写的测试工具和进一步的调查,我发现每个子网站都有自己的应用程序同一 w3wp.exe 工作进程内的域。查看 w3wp 进程的性能计数器时可以看到这一点。
因此,共享完全相同的连接字符串的多个子网站将创建自己的连接池。
因此,一种方法是将数据服务层托管在一个单独的进程下,该进程在多个子网之间共享。其中一种方法是使用 .NET 服务组件(从 ServicedComponent 继承的 C# 类并安装在 COM+ 下。)
我创建了一个测试工具,并证明这确实可以工作并从各个子网络共享相同的连接池。
然而,这种方法提供的隔离级别非常低,因此使您的整个网站容易受到攻击(单点故障)。
如果您担心多个连接池所使用的资源量,您始终可以在连接字符串中控制它。例如,为每个单独的应用程序设置最大池大小。