即使我没有使用字典,我也会收到此错误,而且当我调用该服务时会发生什么奇怪的事。
wsSoapClient client = null;
try
{
client = new wsSoapClient();
}
catch (Exception ex)
{
// - Error in the web.config
}
try
{
SendData sendData = new SendData();
sendData.finishDate = myVar.FinishDate;
sendData.startDate = myVar.StartDate;
// - Other fields
// - This lines throw the error below
ClientResult result = client.FinishCourse(sendData);
}
catch (Exception ex)
{
// - Message: The given key was not present in the dictionary.
}
堆栈跟踪:
StackTrace: at System.Collections.Generic.Dictionary``2.get_Item(TKey key)
at Project.Model.CourseService.FinishCourse(XmlNode node)
该服务是最新的,我无法在其他任何地方找到相关信息。在SO上有两个类似的问题,但它们是关于Silverlight的,我无法想象这个(常规C#WCF调用服务)和解决方案之间的关系。
导致此问题的原因以及如何解决?
(编辑)更多信息:绑定是basicHttpBinding,仅限http。
编辑²:WSDL。
编辑:发现问题。显然,已经有另一个错误(一个大于字段允许的值),服务返回错误但由于某种原因,WCF没有将其视为错误并且没有抛出异常,我猜它试图正常进行,导致这个字典错误,因为XML不是预期的。
答案 0 :(得分:0)
假设您的服务方法不是抛出异常的服务方法,那么可能是服务端发生的soap消息(即请求对象)的反序列化。
检查您的代码(或wsdl)是否存在SendData,并查看是否存在未在请求对象中设置的非可空属性,即sendData对象。缺少必需的属性可能会在反序列化期间导致问题。
发布SendData和\或FinishCourse服务方法的代码可以很好地分析可能的问题。