日期:2014-05-17  浏览次数:20527 次

调用webservice偶尔报错问题
本帖最后由 wx999999999 于 2013-11-12 17:34:54 编辑
调用webservice偶尔会报错,有时点没问题,但是有时点就报错,单独运行webservice从来没有出现过这样问题,这是什么原因呢,请高人指点,谢谢。

System.Web.Services.Protocols.SoapException: 服务器无法处理请求。 ---> System.IndexOutOfRangeException: 索引超出了数组界限。
   在 EDSWebService.ServiceData.RelaContent(String[] devBuf, String[] rtBuf, Int32 devNum, Int32 rtNum) 位置 C:\Projects\EDSWebService\EDSWebService\EDSWebService\ServiceData.cs:行号 193
   在 EDSWebService.WebService.GetPointMonitorData(String sysId) 位置 C:\Projects\EDSWebService\EDSWebService\EDSWebService\WebService.asmx.cs:行号 276
   --- 内部异常堆栈跟踪的结尾 ---

GetPointMonitorData(String sysId)方法中调用了
RelaContent(String[] devBuf, String[] rtBuf, Int32 devNum, Int32 rtNum)
单独运行没有任何问题啊,怎么调用时偶尔会报这个错呢。
webservice

------解决方案--------------------
那就说明跟数据有关,写日志记录出错时的数据
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
------解决方案--------------------
Quote: 引用:

那就说明跟数据有关,写日志记录出错时的数据
  
IndexOutOfRangeException数据类型问题吧!

------解决方案--------------------
按版主说的,用try catch,然后写入日志。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

String[] devBuf, String[] rtBuf
这两个数组,使用前判断
devBuf.Length
如:
if(devBuf.Length>3)
     string b3=devBuf[3];

这两个数组都是有数据的,我用相同的数据进行测试的,我在前台点连接有时能出数据,有时就报那个错,找不到原因在哪

你不用管它有没有数据,你的使用前一律判断,这个错误就可以解决了。
如果里面有定义的数据,也要判断。

谢谢你的回答,我在程序里引用本地的webservice调用很正常,不会报那个错,
但是调用在iis上发布的webservice就不稳定,有时会报错,是什么原因呢

你调用的数组正常啊,别人调用的数组长度可能跟你不一样呢?
比如别人调用是这样:
RelaContent(new string[], new string[], 1, 1);//调用
devBuf和rtBuf都是空的,你说你那里处理,如果不判断会错吗?
再比如:
string[] devBuf=new string[1]{"aa"};
string[] rtBuf=new string[1]{"aa"};
RelaContent(devBuf, rtBuf, 1, 1);//调用

如果你在RelaContent方法里有devBuf[2];那肯定出错啊。
所以devBuf, rtBuf这两个数组使用前先判断长度....