2016-10-05 9 views
2

TransactionScope 내에서 SqlConnection을 사용하려고했습니다. 우리는 사이트를 구축하고이 데이터베이스 호출을 할 때 우리는 오류로 실행 : 참여TransactionScope 오류 내에서 SqlConnection 열기

A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

오류 라인 cnn.Open()에 발생합니다.

using (var scope = new TransactionScope()) 
using (var cnn = new SqlConnection(connectionString)) 
{ 
    cnn.Open(); 
    int result = cnn.QuerySingle<int>("SELECT 1"); 
    Console.WriteLine(result); 
} 

우리는 무엇이 잘못된 것인지 알아 내기 위해 콘솔 응용 프로그램을 작성하고 '진정한'에서 '거짓'에서 우리의 연결 문자열 키워드 '풀링'을 변경하여이 반환 성공적으로 콘솔 응용 프로그램에서 실행 할 수 있다는 것을 발견 우리 결과.

이전과 같은 오류가 발생하여 사이트 연결 문자열이 변경되었습니다.

이 코드가 작동하지 않는 이유가 있습니까?

+0

을 풀링입니까? 두 번째로 풀링과 같은 냄새가 나면서 동일한 물리적 연결이 여러 논리 연결에 재사용됩니다. 이것은 비 결정적이며 언제든지 중단 될 수 있습니다. 더 완벽한 코드를 게시하십시오. 아마도 여러 개의 쿼리 또는 여러 개의 열기가있을 수 있습니다. – usr

+0

Azure Portal에서 제공 한 연결 문자열에서 풀링이 해제되었습니다. 우리는 이것을 켜 보았고 내 로컬 컴퓨터에서 작동했지만 웹 응용 프로그램에 배포 할 때는 작동하지 않았습니다. 그것은 하나 또는 여러 개의 쿼리 또는 연결이있을 때 아무런 차이가 없습니다. 첫 번째 Open에서 실패합니다. – Cassius40k

답변

0

Kudu 서비스를 통해 파일을 보는 것은 예상되는 연결 문자열을 보여 주었기 때문에 web.config가 법률이라는 가정하에 있었지만 분명히 Azure에서는 그렇지 않습니다.

저는 Azure Publish Profile이 web.config 연결 문자열을 무시하고 있음을 발견했습니다.이 오버 라이드에는 여전히 'Pooling = false'가 포함되어 있습니다.

지금 제거하면 코드가 의도 한대로 실행됩니다.

This blog post 설명 더 :

"When this code runs on a developer’s local machine, the value returned will be the one from the web.config file. However when this code runs in Windows Azure Web Sites, the value returned will instead be overridden with the value entered in the portal"

첫째, 왜