【问题标题】:WCF : An item with the same key has already been addedWCF:已添加具有相同密钥的项目
【发布时间】:2013-02-15 16:52:58
【问题描述】:

在使用 150 个用户测试 WCF 服务时,我遇到了这个异常。

注意:我正在使用 MS Test Project 对 WCF 服务进行负载测试。对 100 个用户进行负载测试时,也不例外。

在 System.Linq.Dynamic.DynamicExpression.CreateClass(IEnumerable`1 属性)的 System.Linq.Dynamic 的 System.Collections.Generic.Dictionary2.Insert(TKey key, TValue value, Boolean add) at System.Linq.Dynamic.ClassFactory.GetDynamicClass(IEnumerable1 属性的 System.ThrowHelper.ThrowArgumentException(ExceptionResource 资源)。 ExpressionParser.ParseNew() 在 System.Linq.Dynamic.ExpressionParser.ParseIdentifier() 在 System.Linq.Dynamic.ExpressionParser.ParsePrimaryStart() 在 System.Linq.Dynamic.ExpressionParser.ParsePrimary() 在 System.Linq.Dynamic.ExpressionParser。 ParseUnary() 在 System.Linq.Dynamic.ExpressionParser.ParseMultiplicative() 在 System.Linq.Dynamic.ExpressionParser.ParseAdditive() 在 System.Linq.Dynamic.ExpressionParser.ParseComparison() 在 System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd( ) 在 System.Linq.Dynamic.ExpressionParser.ParseLogicalOr() 在 System.Linq.Dynamic.ExpressionParser.ParseExpression() 在 System.Linq.Dynamic.ExpressionParser.Parse(Type resultType) 在 System.Linq.Dynamic.DynamicExpression.Parse System.Linq.Dynamic.DynamicExpression.ParseLambda(Type itType, Type resultType, String expression, Object[] values) 在 System.Linq.Dynamic 的 Lambda(ParameterExpression[] 参数,Type resultType,String 表达式,Object[] 值)。 DynamicQueryable.Select(IQueryable source, String selector, Object[] values) at CustomEntities.Data.Repository.CustomEntitiesDataRepository.GetCustomEntityData(CriteriaDto criteriaDto) in d:\Projects\SRM\Services\Data\CustomEntities\CustomEntities.Data.Repository\CustomEntitiesDataRepository .cs:第 131 行,位于 d:\Projects\SRM\Services\Data\CustomEntities\CustomEntities.Data.Manager\CustomEntitiesDataManager.cs:第 69 行中的 CustomEntities.Data.Manager.CustomEntitiesDataManager.GetCustomEntityData(CriteriaDto criteriaDto)

【问题讨论】:

    标签: wcf linq entity-framework-5


    【解决方案1】:

    如果您查看您的代码,在第 131 行的 CustomEntitiesDataRepository.cs 中,此行会触发问题。您返回的自定义实体在某种程度上试图将值插入Dictionary<T,U>,但其使用的键已经存在。

    【讨论】:

    • 但它适用于 100 个用户,这意味着存储库没有问题。
    • @Imran 否 - 这意味着您在某个地方存在不经常发生的逻辑缺陷。在某些时候,您会得到一个重复的密钥。这没有得到处理。
    【解决方案2】:

    实际上,.Select() 中似乎存在并发问题。见http://www.webr2.com/system-linq-dynamic-select-new-does-not-appear-to-be-thread-safe/

    最简单的解决方法是在代码中围绕调用 Select 进行一些锁定

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-07
      • 2011-01-27
      • 2021-08-02
      • 2011-03-01
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多