首页 新闻 会员 周边

web Service的方法不能连续调用吗?

0
悬赏园豆:100 [已解决问题] 解决于 2011-04-26 16:35

我用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;
 }
}

 

问题补充: 我只是针对别人的Web Service开发接口,而没办法修改提供Web Service的任何代码。 不过我看到别人做的接口出错的几率要低一些,是不是我的接口调用方式有问题? 比如,webService的实例是不是每次调用都让它释放一遍,而不是做成全局静态的这样?
蓝色心情2010的主页 蓝色心情2010 | 初学一级 | 园豆:95
提问于:2011-02-09 15:09
< >
分享
最佳答案
0

一、连接肯定未关闭。

二、可以有两种思路:

1、可以拼成SQL,如“(1,2,45,100)”这样的参数,然后在web service服务端拼成SQL语句的Where ID in ()

2、使用消息队列

收获园豆:50
邀月 | 高人七级 |园豆:25475 | 2011-02-09 16:39
其他回答(3)
0

我想是因为你的数据库连接在打开操作完成后,没有及时关闭。conn.close();

每操一次,都要记得及关闭数据库操作。

你先可以在前端将sql语句组合成一条,然后在调用webservice只执行一次,这样可以大大提高程序效率。

收获园豆:50
jerry-Tom | 园豆:4077 (老鸟四级) | 2011-02-09 15:19
问题是,webService是别人做的,我没有办法修改他的代码。
支持(0) 反对(0) 蓝色心情2010 | 园豆:95 (初学一级) | 2011-02-09 16:42

@蓝色心情2010: 我也遇到这样的问题的,请问您是怎样解决的,急急。。

支持(0) 反对(0) Commander· | 园豆:202 (菜鸟二级) | 2017-10-10 14:28
0

1、首先你要查看一下webservice里面数据库是否打开后没有关闭,这样当循环到数据库连接池满后就会出现这样的问题。

2、修改一下你的架构,为什么要在循环里面调用webservice这样服务器端压力。

?无止境 | 园豆:246 (菜鸟二级) | 2012-06-06 17:50
0

楼主,我也遇到同样的问题,循环调用web接口,对方的数据库出现资源不足。我的处境跟你的差不到,你是怎么处理的。

Commander· | 园豆:202 (菜鸟二级) | 2017-10-10 14:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册