繁体   English   中英

WCF“字典中不存在给定的键”

[英]WCF “The given key was not present in the 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不是预期的。

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

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

发布SendData和/或FinishCourse服务方法的代码对于分析可能的问题非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM