首页 新闻 会员 周边 捐助

调用WebService,批量初始化数据,w3wp.exe占用oracle 会话InActive

0
[已解决问题] 解决于 2013-08-05 10:09

项目需要批量导入数据,用c++写了个程序,调用c#的Webservice接口
但只要导入工作开始,oracle会话里,马上就出现几十个w3wp.exe占用的会话(状态又是inactive),
oracle会话一会就达到上限了,影响系统
WebServcice接口方法就是 调用ExecuteNonQuery直接插入数据库,没什么问题
如重启iis,inactive的会话就没有了
不知道为啥?
高手们帮分析分析

注:服务器Windows 2008

Bryant的主页 Bryant | 初学一级 | 园豆:12
提问于:2013-07-09 11:28
< >
分享
最佳答案
0

我觉得应该是数据库连接池的原因

为什么说“Oracle会话一会就达到上限了,影响系统”?

奖励园豆:5
dudu | 高人七级 |园豆:30778 | 2013-07-09 12:04

oracle有数量限制,这些inactive会话太多,其他需要连接、操作数据库,就没有会话了

想是不是iis设置问题,不过找了半天没发现

Bryant | 园豆:12 (初学一级) | 2013-07-09 12:44

@Bryant: 在连接字串设置一下Max Pool Size

dudu | 园豆:30778 (高人七级) | 2013-07-09 12:53

@dudu: 

非常感谢dudu,不过还是没有不行,为啥oracle会话都inactive了,iis还不释放呢?

会不户是iis里面有吗问题

Bryant | 园豆:12 (初学一级) | 2013-07-09 13:51

@Bryant: 与IIS无关,ExecuteNonQuery之后立即关闭数据库连接了吗?

dudu | 园豆:30778 (高人七级) | 2013-07-09 13:53

@dudu: 

查看oracle会话,好几十个w3wp.exe 进程占用的,重启下iis,这些会话都没有了。

ExecuteNonQuery这样写的,帮分析下

public static int ExecuteNonQuery(String cmdText, params OracleParameter[] commandParameters)
{
OracleCommand cmd = new OracleCommand();
int val = 0;
using (OracleConnection connection = new OracleConnection(OracleConnectionString))
{
PrepareCommand(cmd, connection, null, CommandType.Text, cmdText, commandParameters);

val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();

}
return val;
}

Bryant | 园豆:12 (初学一级) | 2013-07-09 14:05

@Bryant: 在连接字符串中加上 Pooling=false; 关闭连接池,看还有没有这么多w3wp进程占用Oracle会话

dudu | 园豆:30778 (高人七级) | 2013-07-09 14:21

@dudu: thx,试试,再来汇报成果

Bryant | 园豆:12 (初学一级) | 2013-07-09 16:09
其他回答(2)
0

w3wp.exe 这个进程跟 oracle一点的关系都没有啊

chenping2008 | 园豆:9836 (大侠五级) | 2013-07-09 12:41

w3wp.exe 是调用部署在iis的webservice产生的

这个接口里又调用了oracle

支持(0) 反对(0) Bryant | 园豆:12 (初学一级) | 2013-07-09 12:45
0

谢谢@dudu、@chenping2008的帮忙,原因是网上down的OracleHelper里面有个方法写的有问题

不过没有分了。

Bryant | 园豆:12 (初学一级) | 2013-08-05 10:09

LZ你好,我也是遇到这样的问题,想请问你说的“方法”有问题指的是什么?能不能给我点帮助?

支持(0) 反对(0) ly5tt2nmm | 园豆:200 (初学一级) | 2014-09-02 09:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册