就是现在用到的IIS6.0(2003服务器)的最大工作进程数的问题。
问题点:
当进程数设置为1的时候,两台客户端同时访问相同地址的时候,Oracle会出现异常。
异常的信息是,同一连接不能开始两次事务。
我的理解是两个请求,肯定是完成一个以后再开始下一个。
但通过查看log发现,不是这样的,两个请求被同时响应了,
而且让我更不能理解的是,为什么两个请求会取到同一个Oracle的连接。
望大家给分析分析原因。还是因为其它设置的问题。谢谢!
9 个解决方案
#1
不是很了解,帮顶!
#2
帮顶。。
#3
帮顶。。
#4
精!!!!!!!!!!!!
#5
是不是用静态变量了。
一个进程中静态变量只有一份copy。
IIS处理request会开多个线程的,因此多个线程会同时操作同一个静态变量。
一个进程中静态变量只有一份copy。
IIS处理request会开多个线程的,因此多个线程会同时操作同一个静态变量。
#6
默认情况下,ADO.NET 中启用连接池。除非显式禁用,否则,连接在应用程序中打开和关闭时,池进程将对连接进行优化。还可以提供几个连接字符串修饰符来控制连接池的行为。有关更多信息,请参见MSDN中的“使用连接字符串关键字控制连接池”。
在调用SqlConnection对象的Close方法时,SQL Client .NET数据提供程序并不实际关闭内部连接。相反,数据提供程序将该内部连接存储到一个池中,以便在以后再次使用。甚至在SqlConnection对象被处理之后,该内部连接也保留在池中。如果在以后使用相同连接字符串和凭据调用SqlConnection对象的Open方法,将会再次使用同一内部连接与数据库进行通信。
参考:http://rimland.blog.163.com/blog/static/8832546200981835850969/
在调用SqlConnection对象的Close方法时,SQL Client .NET数据提供程序并不实际关闭内部连接。相反,数据提供程序将该内部连接存储到一个池中,以便在以后再次使用。甚至在SqlConnection对象被处理之后,该内部连接也保留在池中。如果在以后使用相同连接字符串和凭据调用SqlConnection对象的Open方法,将会再次使用同一内部连接与数据库进行通信。
参考:http://rimland.blog.163.com/blog/static/8832546200981835850969/
#8
可以链接池
#9
谢谢,看了这篇帖子,收益非浅。我的程序里面调用连接打开的地方,是调用的共通里面的静态方法来打开的。明天到公司试试,再回来结贴。太感谢大家了。
#1
不是很了解,帮顶!
#2
帮顶。。
#3
帮顶。。
#4
精!!!!!!!!!!!!
#5
是不是用静态变量了。
一个进程中静态变量只有一份copy。
IIS处理request会开多个线程的,因此多个线程会同时操作同一个静态变量。
一个进程中静态变量只有一份copy。
IIS处理request会开多个线程的,因此多个线程会同时操作同一个静态变量。
#6
默认情况下,ADO.NET 中启用连接池。除非显式禁用,否则,连接在应用程序中打开和关闭时,池进程将对连接进行优化。还可以提供几个连接字符串修饰符来控制连接池的行为。有关更多信息,请参见MSDN中的“使用连接字符串关键字控制连接池”。
在调用SqlConnection对象的Close方法时,SQL Client .NET数据提供程序并不实际关闭内部连接。相反,数据提供程序将该内部连接存储到一个池中,以便在以后再次使用。甚至在SqlConnection对象被处理之后,该内部连接也保留在池中。如果在以后使用相同连接字符串和凭据调用SqlConnection对象的Open方法,将会再次使用同一内部连接与数据库进行通信。
参考:http://rimland.blog.163.com/blog/static/8832546200981835850969/
在调用SqlConnection对象的Close方法时,SQL Client .NET数据提供程序并不实际关闭内部连接。相反,数据提供程序将该内部连接存储到一个池中,以便在以后再次使用。甚至在SqlConnection对象被处理之后,该内部连接也保留在池中。如果在以后使用相同连接字符串和凭据调用SqlConnection对象的Open方法,将会再次使用同一内部连接与数据库进行通信。
参考:http://rimland.blog.163.com/blog/static/8832546200981835850969/
#7
#8
可以链接池
#9
谢谢,看了这篇帖子,收益非浅。我的程序里面调用连接打开的地方,是调用的共通里面的静态方法来打开的。明天到公司试试,再回来结贴。太感谢大家了。