c# - 服务堆栈 API - System.InvalidOperationException - ServiceStack.ServiceStackHost.OnEndRequest(IRequest 请求)

标签 c# entity-framework asp.net-web-api servicestack dto

我们正在为我们的 Web 应用程序使用 Service Stack Web API。在生产服务器上,所有功能都可以使用,但是对于每个请求,当我们向服务器发出请求时,都会生成如下错误。

"System.InvalidOperationException: Collection was modified; enumeration operation may not execute".

这是堆栈:

System.InvalidOperationException: Collection was modified; enumeration operation may not execute.

在 System.Collections.Hashtable.HashtableEnumerator.MoveNext() 在 ServiceStack.ServiceStackHost.OnEndRequest(IRequest 请求)

抛出错误的代码。

 public UserPetsResponse Any(GetUserPetsDTO request)
    {
        UserPetsResponse res = new UserPetsResponse();
        if (request.subscriberID != null)
        {
            try
            {
                var controller = new ExactTargetControllers.ExactTargetControllers();
                res = controller.GetActivePetsOfSubscriber(request.subscriberID);
            }
            catch (Exception ex)
            {
                res.responseMessage = ResponseMessage.Error;
                ErrorLogger errorlog = new Service.ErrorLogger();
                errorlog.LogInElmah(ex);
            }
        }
        return res;
    }

public UserPetsResponse GetActivePetsOfSubscriber(string subscriberID)
    {
        UserPetsResponse res = new UserPetsResponse();
        List<PetModel> pets = new List<PetModel>();
        APIObject[] Results;
        String requestID;
        String status;
        // Instantiate the retrieve request
        RetrieveRequest rr = new RetrieveRequest();
        rr.ObjectType = String.Format("DataExtensionObject[{0}]", _CustomerKey_PetDE);//required
                                                                                      // Setting up a simple filter
        SimpleFilterPart sf = new SimpleFilterPart();
        sf.SimpleOperator = SimpleOperators.equals;
        sf.Property = "SubscriberID";
        sf.Value = new String[] { subscriberID };
        //Add Filter
        rr.Filter = sf;
        rr.Properties = new string[] { "SubscriberID", "petName", "petBirthday", "petSpecies"
                                        ,"petBreed","_CustomObjectKey","IsActive","petID"};//required //Any Column on the Data Extension
        status = _frameWork.Retrieve(rr, out requestID, out Results);
        for (int i = 0; i < Results.Length; i++)
        {
            PetModel pet = new PetModel();
            pet = PetMapper(Results[i]);
            if (pet.isActive)
            {
                pets.Add(pet);
            }

        }
        if (status.Contains("OK"))
        {
            res.responseMessage = ResponseMessage.OK;
        }
        else
        {
            res.responseMessage = ResponseMessage.Error;
            res.errorMessage = status;
        }
        res.pets = pets;
        return res;
    }

我不确定为什么会收到此错误。

最佳答案

ServiceStack 的 OnEndRequest遍历并处理该请求的所有实例或请求依赖项,因此您应该检查该请求中使用的依赖项的 IDisposable 实现,尤其是使用 哈希表

关于c# - 服务堆栈 API - System.InvalidOperationException - ServiceStack.ServiceStackHost.OnEndRequest(IRequest 请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43969880/

相关文章:

c# - 使用正则表达式使用捕获组多次匹配

c# - 排除循环中的最后一个元素

c# - Xunit 测试自定义消息的 IHttpActionResult Web api 2 函数

Angular Universal Render 等待 Http 结果 Observable Subscriber

Azure 中的 ASP.NET MVC 4 和 Web API - 未找到 HTTP 资源

c# - 使用 Ninject 的 MVC 5 流畅验证

c# - 将多行字符串变量从 C# 传递到 javascript

c# - 创建 Entity Framework Context 的实例在负载下变慢

c# - 如何使用代码优先 Entity Framework 指定外键

asp.net-mvc - 在MVC Controller 中处置DbContext,哪种方式 "better"?