我用for循环连续调用web Service的同一个方法经常碰到服务器端oracle数据库的“连接未关闭”错误,有时候又不会出错,请问这是什么原因?有没有办法把我要做的n次调用一次性发过去等待结果?
我的代码大致如下:
public static class webServiceManager
{
private static xnhService.Service ws = new App.xnhService.Service(); // 创建Service的实例
public static xnhService.FalseOrTrue DeleteQD(int qdid)
{
return ws.DeleteQD2(qdid, dmdzbManager.UserNhdm, dmdzbManager.YljgSqm);
}
public static xnhService.FalseOrTrue DeleteAllQD(List<xnhService.QDInfo> QDInfos, string pid)
{
xnhService.FalseOrTrue fot = new App.xnhService.FalseOrTrue();
foreach (xnhService.QDInfo qd in QDInfos)
{
fot = DeleteQD(Convert.ToInt32(qd.onlyid));
if (!string.IsNullOrEmpty(fot.falsemessage))
{
return fot;
}
}
return fot;
}
}
一、连接肯定未关闭。
二、可以有两种思路:
1、可以拼成SQL,如“(1,2,45,100)”这样的参数,然后在web service服务端拼成SQL语句的Where ID in ()
2、使用消息队列
我想是因为你的数据库连接在打开操作完成后,没有及时关闭。conn.close();
每操一次,都要记得及关闭数据库操作。
你先可以在前端将sql语句组合成一条,然后在调用webservice只执行一次,这样可以大大提高程序效率。
@蓝色心情2010: 我也遇到这样的问题的,请问您是怎样解决的,急急。。
1、首先你要查看一下webservice里面数据库是否打开后没有关闭,这样当循环到数据库连接池满后就会出现这样的问题。
2、修改一下你的架构,为什么要在循环里面调用webservice这样服务器端压力。
楼主,我也遇到同样的问题,循环调用web接口,对方的数据库出现资源不足。我的处境跟你的差不到,你是怎么处理的。