在调用WCF API时,索引超出了数组的边界

本文关键字:数组 边界 索引 WCF 调用 API | 更新日期: 2023-09-27 18:18:34

我在应用程序的某些部分使用ASP.net(c#, .net Framework 4.0)开发了一个web应用程序,我正在调用API来获取一些信息。我注意到一些对API的调用失败了,我得到了这个错误:

索引超出数组边界

当我检查堆栈跟踪时,我看到如下:

在System.Collections.Generic.Dictionary2

。Insert(TKey key, TValue value, Boolean add)

在System.Collections.Generic.Dictionary2

。set_Item(TKey key, TValue值)

在Navitaire.Ncl.Validation.ValidationManager

。getValidationAttributes(MemberInfo mi, Boolean&)跳过)

在Navitaire.Ncl.Validation.ValidationManager

。validate(Object declaringObject, Object value, MemberInfo mi, List1 results)

在Navitaire.Ncl.Validation.ValidationManager

。Validate(Object obj)

在Navitaire.Ncl.ServiceModel.ParameterValidationInspector

。BeforeCall(String operationName, Object[] inputs)

在Navitaire.Ncl.ServiceModel.Remoting.BoilerplateSinkBase

。调用beforeallinspector (StateData, StateData, RemotingMessage&消息)

在Navitaire.Ncl.ServiceModel.Remoting.BoilerplateServerSink

。ProcessMessage(IServerChannelSinkStacksinkStack, IMessage requestMsg, ittransporttheaders requesttheaders, Stream requestStream, IMessage&responseMsg ITransportHeaders&responseHeaders Stream&responseStream)

在System.Runtime.Remoting.Channels.BinaryServerFormatterSink

。IServerChannelSinkStack sinkStack, IMessage requestMsg, ittransporttheaders requesttheaders, Stream requestStream, IMessage&responseMsg ITransportHeaders&responseHeaders Stream&responseStream)

我在catch异常部分设置了一个断点,所以每次我得到错误时,应用程序将停止,我可以读取异常。我注意到,如果在这一刻我再次调用API(将光标移动到API调用行),它工作得很好。所以这意味着我传递给API的参数没有问题。

我尝试在三个不同的环境中运行应用程序,使用完全不同的网络和不同的互联网连接,但我仍然得到相同的错误。

你能请人帮我一下这个案子吗?

谢谢

在调用WCF API时,索引超出了数组的边界

我怀疑这是API的问题,而不是你的代码的问题,特别是如果你第二次进行相同的调用它工作。
我相信API正在使用内部字典做一些事情,第一次调用它时并没有正确设置,但第二次调用时,它已经"正确"地工作了。

你是否能够查看/访问你调用的API方法的代码?

如果是这样,您最好在调试中与应用程序一起运行它,在该方法的入口上放置一个断点,并遍历其中的行,查看它正在做什么以及为什么它可能会中断。
如果这是你的API,或者你被允许共享这个方法的代码,而你自己找不到错误,请张贴API方法的代码,我会帮助你找到原因。

如果你不能查看代码,我建议联系API的生产者,如果它是一个私有的,或者如果它是一个开源的API,分享链接,并提供一个代码示例,你的代码看起来像什么(显示你如何使API调用),我们可以帮助诊断它

我检查了API开发人员,我发现在他们修复错误后,他们这边有一些问题,我没有得到任何错误了。