2012-08-28 2 views
4

간단한 ASP.NET 호스팅 WCF 서비스에는 Entity Framework를 사용할 때 모두 동일한 패턴을 가진 여러 가지 메서드가 있습니다.ASP.NET 호스팅 WCF 서비스를 동시에 호출 할 때 Entity Framework 오류가 발생합니다.

public void Operation1(string username) 
{ 
    using(MyEFContext context = new MyEFContext()) 
    { 
     UserInfo info = (from ui in context.UserInfos 
         where ui.User.Equals(username) 
         select ui).FirstOrDefault<UserInfo >(); 

     info.LastAccess = DateTime.Now; 

     // Operation specific code, such as getting information using the EF context 

     context.SaveChanges(); 
    } 
} 

예제를 단순하게 유지하기 위해 축소 된 버전이지만이 간단한 버전에도 내 프로덕션 코드 세트와 동일한 오류가 있습니다. 이 코드는 Entity Framework를 사용하여 사용자 정보를 가져 오는 것으로 시작하고 사용자 LastAccess 필드를 업데이트 한 다음 작업 관련 코드를 수행합니다. 작업 특정 코드는 정보를 쿼리합니다. 결국 LastChange가 SaveChanges를 호출하여 LastAccess가 다시 데이터베이스에 저장됩니다. 이제 클라이언트가 두 번 전화를 걸 때까지이 모든 것이 완벽하게 작동합니다.

클라이언트는 두 번의 호출을 수행하며 각 호출마다 다른 작업을 수행하지만 둘 다 위에 표시된 것과 동일한 코드 패턴을가집니다. 때로는 두 통화 모두 성공으로 완료됩니다. 하지만이 두 작업도에서 작동 할 것으로 예상하기 때문에

System.Data.EntityException: The underlying provider failed on Open. ---> 
System.InvalidOperationException: The connection was not closed. The connection^s current 
state is connecting. 

System.Data.EntityCommandExecutionException: An error occurred while executing the command 
definition. See the inner exception for details. ---> System.InvalidOperationException: 
ExecuteReader requires an open and available Connection. The connection^s current state is 
closed. 

System.InvalidOperationException: Invalid attempt to read when no data is present. 

은 분명히 EF와 ASP.NET에 대한 이해가 결함이 ... 다른 시간에 그들 중 하나가 오류로 생산되며, 다음과 같은 세 가지 중 하나가 될 수있다 평행. 한 번에 하나씩 만 발생하도록 각 방법 주위에 자물쇠를 넣어야합니까? 분명히 아니다. 어떤 아이디어?

+0

호출 당 서비스 활성화를 사용하고 있습니까? 즉, WCF 서비스에 대한 각 호출이 생성되는 서비스의 개별 인스턴스를 의미합니까? – mclark1129

+0

Per-Call의 기본값입니다. –

+0

이 질문을 살펴보면 IIS에서 호스팅하는 동안 통합 보안을 사용하는 문제를 지적합니다. 이 앱을 기본 앱 풀에서 호스팅하고 있습니까? : http://stackoverflow.com/questions/2475008/the-underlying-provider-failed-on-open – mclark1129

답변

2

여기에서 답변을 찾을 수 있습니다. Managing EntityConnection lifetime. 모든 내 컨텍스트에 대해 동일한 EntityConnection 인스턴스를 다시 사용하는 것이 문제였습니다. 이제는 매번 새로운 것을 만듭니다.

관련 문제