2017-05-14 6 views
2

우리는 웹 응용 프로그램에 서비스 스택 웹 API를 사용하고 있습니다. prod 서버에서는 모든 기능이 작동하지만 모든 요청에 ​​대해 서버에 요청할 때 아래와 같은 오류가 발생합니다. 여기 서비스 스택 API - System.InvalidOperationException - ServiceStack.ServiceStackHost.OnEndRequest (IRequest 요청)

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

은 스택입니다 :

던지고 ServiceStack.ServiceStackHost.OnEndRequest (IRequest 요청)

코드에서 System.Collections.Hashtable.HashtableEnumerator.MoveNext() 에서

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

오류.

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; 
    } 

왜이 오류가 발생하는지 잘 모르겠습니다.

답변

1

ServiceStack의 OnEndRequest은 통과하고 해당 요청에 사용되는 의존성의 IDisposable 구현하는 Hashtable를 사용하는 이들 중 특히 어떤을 확인해야하므로 해당 요청에 대한 모든 인스턴스 별 또는 요청 종속성을 처분한다.

+0

@mythz 답장을 보내 주셔서 감사합니다. 나는 몇 가지 이유로 내 서비스를 호출 할 때 첫 번째 요청이 null이며 즉시 올바른 요청을받는 것으로 나타났습니다. 이것을 피하는 방법이 있습니까? – Gokul

+0

@ 골쿨 (Gokul) 왜 '널 (null)'응답을 얻는 지 알지 못합니다. 알아 내기 위해 서비스를 디버깅해야합니다. – mythz

+0

몇 가지 정보를 추가하십시오. 우리는 딱딱한 환경에서만이 오류가 발생합니다. 로컬/Dev/QA에서 발생하지 않는 것이 약간 이상합니다. 나는 서비스 스택 개발에 익숙하지 않다. 'IDisposable' 구현을 어떻게 확인할 수 있습니까? Thanks @mythz – Gokul