우리는 Azure에서 호스팅되는 작업자 역할이 있으며 해당 데이터베이스에 SQL Azure를 사용합니다. 이 오류는 다음과 같은 오류와 함께 실패합니다 연결/트랜잭션을 만들기 위해, 다음의 모든 시도가 발생하면 System.Data.EntityException: The underlying provider failed on Open. ---> System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable)
이SQL 열기 실패로 인해 응용 프로그램 풀이 재활용 될 때까지 시간 초과로 인해 체계적인 TransactionAbortedException이 발생합니다.
: System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.TimeoutException: Transaction Timeout
은 본질적으로 우리의 모든 서비스 이후 사용할 수없는 우리의 전체 서비스를 (렌더링 때때로는 SQL 연결 오류가있을 것입니다 데이터베이스 액세스 필요).
우리가 발견 한 유일한 해결책은 수동으로 응용 프로그램 풀을 재활용하는 것입니다. 분명히 이것은 문제가 발생할 때마다 누군가가 수동으로 응용 프로그램 풀을 재활용 할 때까지 인스턴스가 서비스 요청을 처리 할 수 없기 때문에 문제가됩니다.
분명히 우리는 문제 해결을위한 해결책이나 응용 프로그램 풀 재활용 (또는 비슷한 결과를 얻을 수있는) 자동화를위한 대안을 찾고 있습니다.
우리는 Entity Framework 4 (기존 프로젝트, 그대로 작동하며 아직 업그레이드 할 이유가 없음)를 사용 중입니다. 따라서 EF4는 각 쿼리 또는 SaveChanges
호출에 대해 데이터베이스 연결을 열거 나 닫을 것이므로 코드에서 ObjectContext.Connection.Open()
을 사용하여 트랜잭션을 만들 때 연결을 강제로 열어 여러 개의 쿼리 또는 업데이트가있는 경우 트랜잭션을 MSDTC로 보내지 않도록합니다 동일한 거래. 이 초기 열기 중에 예외가 발생합니다.
TransactionScope
의 경우 TransactionScopeOption.Required
및 IsolationLevel.ReadCommitted
을 사용하고 있습니다.