在调用WCF API

时间:2015-10-21 08:47:05

标签: c# asp.net .net wcf api

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

  

索引超出了数组的范围。

当我检查堆栈跟踪时,我看到了这个:

  

at System.Collections.Generic.Dictionary2.Insert(TKey key,TValue value,Boolean add)

     

at System.Collections.Generic.Dictionary2.set_Item(TKey key,TValue   价值)

     

at Navitaire.Ncl.Validation.ValidationManager.getValidationAttributes(MemberInfo mi,Boolean& skip)

     

at Navitaire.Ncl.Validation.ValidationManager.validate(Object declaringObject,Object value,MemberInfo mi,List1 results)

     

at Navitaire.Ncl.Validation.ValidationManager.Validate(Object obj)

     

at Navitaire.Ncl.ServiceModel.ParameterValidationInspector.BeforeCall(String operationName,Object [] inputs)

     

at Navitaire.Ncl.ServiceModel.Remoting.BoilerplateSinkBase.InvokeBeforeCallInspectors(StateData stateData,RemotingMessage& message)

     

at Navitaire.Ncl.ServiceModel.Remoting.BoilerplateServerSink.ProcessMessage(IServerChannelSinkStacksinkStack,IMessage requestMsg,ITransportHeaders requestHeaders,Stream requestStream,IMessage& responseMsg,ITransportHeaders&    responseHeaders,Stream& responseStream)

     

at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack,IMessage requestMsg,ITransportHeaders requestHeaders,Stream requestStream,IMessage& responseMsg,ITransportHeaders&    responseHeaders,Stream& responseStream)

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

我尝试在完全不同的网络和不同的互联网连接的三种不同环境下运行应用程序,但我仍然遇到了同样的错误。

请问有人帮我解决这个案子吗?

由于

2 个答案:

答案 0 :(得分:0)

我怀疑这是API的问题,而不是您的代码,特别是如果它第二次拨打同一个电话时有效。
我相信API正在使用内部字典做一些事情,在你第一次调用时它并没有完全正确设置,但是第二次,它已经并且正确地工作了#34;。

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

如果是这样,你最好在调试中与你的应用程序一起运行,在该方法的条目上放置一个断点并跨越其中的行以查看它正在做什么以及为什么它可能打破。
如果它是您的API,或者您被允许分享此方法的代码而您自己无法找到错误,请发布API方法的代码,我会发布帮助您找到原因。

如果您无法查看代码,我建议您与API的制作人联系,如果它是私有的,或者如果它是开源API,请分享链接并提供代码您的代码看起来是什么样子(显示您如何进行API调用),我们可以帮助您进行诊断。

答案 1 :(得分:0)

我和API开发人员一起检查过,我发现在他们修复了我没有得到任何错误的错误之后,他们身上出现了一些问题。