单线程循环调用 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;
}
每次请求之后资源释放么?如果没释放会会造成请求阻塞,你的info2是不是该有个释放的,函数。
没有,,,释放,,能否给个简单案例,,谢谢咯
@VS_Demo:
你先看下是不是这个问题,如果上面信息每次都是调用到 第20行就出现问题,估计就是上面所说的问题,如果不是 ,那就是别的问题。20行是个例子 ,也许是别的数字 ,
恩恩,好的,我试试,,,,
上完整代码,不想暴露代码,写个伪代码也行。
你这个只字片言 看不出个啥
代码是这样的:
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;
}
报错截图:
这是客户那边的接口,,我想知道,这是他们那边接口的问题,还是我程序调用的问题?麻烦你帮我看一下
服务扛不住太多请求,资源就那样,你也没辙。要是再考虑网络原因,超时很正常。修改你的策略,首先用try,catch捉住异常。如果想做到更友好,你这边启用排队机制,真正的一个一个请求来调用别人的服务。我怀疑你这边并不能真正保证只有一个单线程在调用服务。
最快捷的方法是,把问题上报,让更有经验的人来处理。