WCF“给定的密钥不在字典中”

时间:2015-01-29 15:03:36

标签: c# wcf dictionary

即使我没有使用字典,我也会收到此错误,而且当我调用该服务时会发生什么奇怪的事。

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不是预期的。

1 个答案:

答案 0 :(得分:0)

假设您的服务方法不是抛出异常的服务方法,那么可能是服务端发生的soap消息(即请求对象)的反序列化。

检查您的代码(或wsdl)是否存在SendData,并查看是否存在未在请求对象中设置的非可空属性,即sendData对象。缺少必需的属性可能会在反序列化期间导致问题。

发布SendData和\或FinishCourse服务方法的代码可以很好地分析可能的问题。