2009-08-11 3 views
1

asp.net 웹 사이트와 데이터베이스가 있습니다.SOAP 웹 서비스 (.net)의 db 연결을위한 적절한 장소

웹 사이트에는 내 소프트웨어의 피드백을 저장하는 웹 서비스가 있습니다.

내가 아는 한 IIS는 순차 요청에 대해 만들어진 개체를 다시 사용합니다. 이것은 웹 서비스의 생성자에서 DB에 연결하고 Dispose() 메서드를 올바르게 구현하고 각각 [WebMethod] Request()을 제공하기 위해 연결을 사용해야하는 이유를 제공합니다. 현재 판은이 패턴을 따른다.

한편 웹 서비스에 대한 순차적 요청 간의 시간 간격은 DB 연결 시간 초과로 커집니다. 따라서 일부 예외를 잡아 연결을 다시 생성해야합니다 (맞습니까?)

대체 방법은 각 [WebMethod] Foo()에 연결하고 닫는 것입니다. 하지만 이것이 성능에 영향을 줄 수 있습니다.

요약하면 을 생성자의 DB에 연결하고 Dispose()에 연결을 닫거나 각 요청에 대해 DB를 연결하고 닫아야합니까?

+0

아니요, 웹 서비스 개체가 다시 사용되지 않습니다. 각 요청에 대해 새 인스턴스가 만들어집니다. –

답변

5

각 요청마다 연결해야합니다.

페이지 인스턴스는 단일 요청에만 사용되므로 재사용을 위해 연결을 저장할 수 없습니다. 당신은 다른 곳에 그것을 저장해야 할 것이고, 그것은 (스레드 안전성 등으로) 매우 복잡해서 그럴 가치가 없습니다.

연결을 닫으면 실제 데이터베이스 연결이 연결 풀로 반환됩니다. 연결 풀은 사용자가 만든 다음 연결 개체에 대해 다시 사용할 때 연결을 올바르게 재설정하므로 이전 사용에 의해 살아 있고 연결되지 않은 연결을 얻을 수 있습니다.

연결 풀은 정상적으로 작동하므로 직접 만들지 말고 사용해야합니다.

연결 풀링을 사용하는 데 특별히 필요한 작업은 데이터베이스 드라이버에 내장되어 있습니다. 평소처럼 연결 개체를 열고 닫으십시오.

+0

우리는 여러분에게 asp.net에서 자동으로 연결 풀링을 얻거나 설정이나 코딩의 특정 비트가 있다는 것을 말하고 있습니까? 스레드 풀 트랜잭션을 인식하고 있습니까? 미래의 독자가 그 대답을 철자로 쓰면 도움이 될 수 있습니다. – djna

+0

좋은 지적. 내가 편집 할거야 ... :) – Guffa

+0

설명해 주셔서 감사합니다. :-) – djna

0

처리 할 수있는 연결 풀링 기능이 있습니까? WS 객체는 풀에서 연결을 가져오고 완료되면 반환합니다. 풀은 타임 아웃과 실제 개폐를 처리합니다.

내 주문 순서는 다음과 같습니다.

1). 만약 당신이 connectio 풀링 그것을 사용합니다.

2). 그렇지 않으면 각 요청에 대해 간단하게 열거 나 닫습니다. 스레드 안전 연결 풀을 작성하는 것은 쉬운 일이 아닙니다.

3). 성능이 문제가되는 것으로 판명되면 connect-each-time 오버 헤드가 원인인지 조사하십시오. 그렇다면 풀을 찾아 내거나 (최후의 수단) 코드를 풀어보십시오.

1

ADO.NET 2.0 이상에서는 DB 연결이 풀링되므로 연결의 실제 열기 및 닫기는 DB 연결 풀에서 관리되므로 풀은 제한 시간까지 열어 둘 수 있기 때문에 개별 메서드에서 자유롭게 열고 닫을 수 있습니다 . 풀 설정을 구성 할 수도 있습니다.

관련 문제