Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在IIS实例中的所有应用程序/虚拟目录/版本之间共享Oracle连接池?_C#_Oracle_Iis - Fatal编程技术网

C# 如何在IIS实例中的所有应用程序/虚拟目录/版本之间共享Oracle连接池?

C# 如何在IIS实例中的所有应用程序/虚拟目录/版本之间共享Oracle连接池?,c#,oracle,iis,C#,Oracle,Iis,如何在IIS实例中的所有应用程序/虚拟目录/版本之间共享Oracle连接池?连接池由.NET Framework管理,每个连接字符串都是唯一的。因此,如果您使用的是完全相同的连接字符串(如果您使用的是Windows集成身份验证,则包括用户标识),它将共享连接池 如果运行Performance Monitor,则可以添加计数器“.NET Data Provider for Oracle”,并选择用于监视连接池统计信息的进程(例如w3wp.exe) 如果您有多个虚拟目录(子网站),它们可以共享同一个

如何在IIS实例中的所有应用程序/虚拟目录/版本之间共享Oracle连接池?

连接池由.NET Framework管理,每个连接字符串都是唯一的。因此,如果您使用的是完全相同的连接字符串(如果您使用的是Windows集成身份验证,则包括用户标识),它将共享连接池

如果运行Performance Monitor,则可以添加计数器“.NET Data Provider for Oracle”,并选择用于监视连接池统计信息的进程(例如w3wp.exe)

如果您有多个虚拟目录(子网站),它们可以共享同一个应用程序池(w3wp.exe进程)。但是,根据我编写的测试工具和进一步的调查,我发现每个子网站在同一w3wp.exe工作进程中都有自己的应用程序域。这在查看w3wp进程的性能计数器时可见

因此,多个子站点共享完全相同的连接字符串将创建它们自己的连接池

因此,一种方法是将数据服务层托管在一个单独的进程下,该进程在多个子网站之间共享。其中一种方法是使用.NET服务组件(从ServicedComponent继承并安装在COM+下的C#类)

我创建了一个测试线束,并证明它确实可以工作,并且可以共享来自不同子站点的相同连接池

但是,这种方法提供的隔离级别非常低,因此使整个网站易受攻击(单点故障)


如果您担心拥有多个连接池所使用的资源量,您可以始终在连接字符串中对此进行控制。例如,为每个应用程序设置最大池大小。

每个AppDomain资源都有一个连接。由于对象只能存在于一个AppDomain内部的根本原因,您无法在AppDomain之间共享它们

因此,您的要求无法满足


你为什么一开始就需要这个?这听起来像II6/IIS7.5中的。

在应用程序池下运行子网站。如果子网站共享一个应用程序池,那么当然可以共享同一个连接池。@WarrenRox但子应用程序不是在不同的应用程序域中隔离的吗?我试图找到答案,但没有找到权威的答案。我相信Windows使用进程作为隔离应用程序域的手段。因此,类似地,您可以让COM+服务器应用程序进程管理所有web应用程序的连接池(即使它们位于不同的应用程序池下)。@WarrenRox我对COM+一点也不熟悉,但我怀疑是否存在跨进程共享TCP连接的实际方法。在我看来,要求跨进程IPC执行命令是不现实的。