2017-11-11 2 views
0

여기에 이상한 오류가 있습니다. Entity Framework 6.2를 사용하는 ASP.NET 4.6 앱에서 SQL Azure 데이터베이스에 액세스 할 때 "사용자가 로그인하지 못했습니다."라는 메시지가 나타납니다. Azure에서 오류의 원인이 전환하는 것이 확실합니다. 내가 얻지 못하는 것은 오류가 잡히지 않는 이유입니다. 우리가 가지고있는 모든 SQL 연산은 try ... catch 블록 안에있다. 오류는 블록에서 빠져 나와 앱이 충돌하기 바로 전에 Globals.asax에 걸립니다. 우리는 내가 그것을 이해, 첫 번째 오류에서 적어도 70 초 동안 아무 SQL 실행 10 번을 다시 시도합니다,처리되지 않은 예외 오류 - 사용자가 로그인하지 못했습니다.

SetExecutionStrategy("System.Data.SqlClient", Function() New SqlServer.SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(7))) 

있습니다. Microsoft 기술 지원에 따르면 아직 SQL Azure에 연결하지 않았으므로이 작업이 진행되지 않습니다. ConnectRetryCount와 연결 문자열의 간격은 서버와 통신 중이므로 적용되지 않습니다. 서버는 단지 "당신이 거기 있다는 것을 알고 있지만 당신을 들여 보내지 않을 것입니다!"라고 말하고 있습니다. MS 기술 지원에 따르면이 문제를 해결할 수있는 유일한 방법은 모든 SQL 명령에 try ... catch 블록을 사용하는 것입니다. 그냥 넘어지고 응용 프로그램이 충돌합니다!

globals.asax에서 재 시도를 할 수 없습니다.이 시점에서 이미 충돌이 발생했기 때문입니다. MS에 따르면 컨텍스트에서 오류를 트랩하고 거기에서 다시 시도 할 방법이 없습니다. 그래서, 해결책은 무엇입니까? "그냥 응용 프로그램을 추락시키고 페이지를 새로 고치게하십시오!"이외의 대답이 있어야합니다.

나중에 페이지를 새로 고침 할 때 모두 괜찮습니다. 오류 없음, 문제 없음. 오류를 던지고 코드의 라인 중 하나의

예 :

MapTo = ctx.BrowserMaps.FirstOrDefault(Function(x) code.Contains(x.NameOrUserAgent)) 

매우 정직하고 정말. 이 코드 블록은 자주 호출되기 때문에이 코드는 많이 발생합니다. 실제 SQL 요청은 어떤 행이 사용 되더라도 EF 내에서 연결이 실패하기 때문에 관련이 없습니다.

답변

2

새 계층으로 확대/축소 할 때 서버 로그인 연결이 끊어지고 트랜잭션이 롤백됩니다. 그러나 포함 된 데이터베이스 로그인은 확장 프로세스 중에 연결 상태를 유지하므로 이러한 작업은 서버 로그인보다 권장됩니다.

오류 # 0을 캡처하고 Azure SQL 데이터베이스의 많은 오류가 해당 오류 0 범주에 속하기 때문에 try and catch를 사용하면 문제가 해결되지 않을 수 있습니다.

크기 조정 후 성능이 좋지 않을 수 있으며 몇 분 후에 성능이 향상 될 수 있습니다. 쿼리 계획도 변경 될 수 있습니다.

+0

이것은 다소 답입니다. 이 경우 모델의 생성자에 try.catch를두면 재시도 논리를 설정할 수 있습니다. 우리는 지금 데이터베이스 로그인을 조사하고 있습니다. 감사합니다. –

관련 문제