首页 新闻 会员 周边 捐助

单线程循环调用 webservice 报错

0
悬赏园豆:50 [已解决问题] 解决于 2015-12-31 15:30

单线程循环调用 webservice 时报错  请求被终止,请求已取消

代码如下:

  for (int i = 0; i < zm5.Length; i++)
            {
                
                ZrfcGetMatInfo info2= new ZrfcGetMatInfo();
                info2.IrMode = "M";
                info2.EtOut = new Zmms003[1];
                info2.IrMatnr = new Zpbst001[] { new Zpbst001 { Low = zm5[i].Matnr, High = "", Option = "EQ", Sign = "I" } };
                Zmms003[] zm3 = sap.ZrfcGetMatInfo(info2).EtOut;

           }

quan0zhou的主页 quan0zhou | 初学一级 | 园豆:127
提问于:2015-12-31 11:59
< >
分享
最佳答案
0

每次请求之后资源释放么?如果没释放会会造成请求阻塞,你的info2是不是该有个释放的,函数。

收获园豆:50
_Arnold | 小虾三级 |园豆:635 | 2015-12-31 15:22

没有,,,释放,,能否给个简单案例,,谢谢咯

quan0zhou | 园豆:127 (初学一级) | 2015-12-31 15:23

@VS_Demo: 

你先看下是不是这个问题,如果上面信息每次都是调用到  第20行就出现问题,估计就是上面所说的问题,如果不是  ,那就是别的问题。20行是个例子 ,也许是别的数字 ,

_Arnold | 园豆:635 (小虾三级) | 2015-12-31 15:27

恩恩,好的,我试试,,,,

quan0zhou | 园豆:127 (初学一级) | 2015-12-31 15:29
其他回答(2)
0

上完整代码,不想暴露代码,写个伪代码也行。

你这个只字片言 看不出个啥

需要格局 | 园豆:2145 (老鸟四级) | 2015-12-31 12:09

代码是这样的:

             ZFG_RFC_GL sap = new ZFG_RFC_GL();
            NetworkCredential ps2 = new NetworkCredential("abc", "123“);
            sap.Credentials = ps2;
            sap.Timeout = 600000;

             ZrfcGetMatInfo info1 = new ZrfcGetMatInfo();
            info1.IrMode = "P";
            info1.EtPri = new Zmms005[1];
            info1.IrVkorg1 = new Zpbst001[] { new Zpbst001 { Low = "8011", High = "8142", Option = "BT", Sign = "I" } };

             Zmms005[] zm5= sap.ZrfcGetMatInfo(info1).EtPri;         

  for (int i = 0; i < zm5.Length; i++)
            {
                
                ZrfcGetMatInfo info2= new ZrfcGetMatInfo();
                info2.IrMode = "M";
                info2.EtOut = new Zmms003[1];
                info2.IrMatnr = new Zpbst001[] { new Zpbst001 { Low = zm5[i].Matnr, High = "", Option = "EQ", Sign = "I" } };

                //每次在调用这个接口的这个方法获取数据时,一旦访问次数过多时,就会报错,报错点就在这个地方
                Zmms003[] zm3 = sap.ZrfcGetMatInfo(info2).EtOut;

           }

报错截图:

支持(0) 反对(0) quan0zhou | 园豆:127 (初学一级) | 2015-12-31 13:32

这是客户那边的接口,,我想知道,这是他们那边接口的问题,还是我程序调用的问题?麻烦你帮我看一下

支持(0) 反对(0) quan0zhou | 园豆:127 (初学一级) | 2015-12-31 13:34
0

服务扛不住太多请求,资源就那样,你也没辙。要是再考虑网络原因,超时很正常。修改你的策略,首先用try,catch捉住异常。如果想做到更友好,你这边启用排队机制,真正的一个一个请求来调用别人的服务。我怀疑你这边并不能真正保证只有一个单线程在调用服务。

最快捷的方法是,把问题上报,让更有经验的人来处理。

arg | 园豆:1047 (小虾三级) | 2015-12-31 15:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册