2010-06-11 4 views
0

끝점에 노출 된 세 가지 메서드, 즉 performSqlOperationA(), performSqlOperationB()performSqlOperationC()을 사용하여 (상태 비 저장) WCF 서비스를 만들고 싶다고 가정합니다. 각 메소드는 SQL 데이터베이스에 데이터를 삽입합니다.WCF 호출 내에서 SQL 연결을 처리하는 좋은 방법은 무엇입니까?

내 사무실에서 일하는 것을 본 방식대로 각 메서드는 SqlConnection 개체를 초기화하는 코드로 시작됩니다. 각 메소드는 안전하게 처리하기위한 코드로 끝납니다.

이러한 WCF 메서드를 코딩하여 각 메서드에서 이러한 작업을 수행하지 않고도 SqlConnection 개체가 초기화되고 각 메서드에서 삭제되도록하는 것이 좋습니다. WCF 메서드에 대한 클래스의 생성자에서 초기화 된 연결을 가질 수 있지만 처리하는 방법을 알지 못합니다 ... 호출을 using 블록으로 래핑 할 수 없습니다.

잘 알고있는 해결책 중 하나는 PostSharp입니다. 특정 코드가 각 메서드 호출의 시작과 끝에서 자동으로 실행되도록하는 특성을 설정할 수는 있지만이 작업을 수행하는 것이 좋습니다 .net 프레임 워크 만.

답변

3

using 문을 사용하여 각 메서드 호출 (또는 WCF 서비스 작업에서 호출하는 개인 데이터 액세스 메서드)에서 SqlConnection 개체를 초기화하고 처리하는 것이 가장 좋습니다.

public void performSqlOperationA() 
{ 
    ... 
    using(SqlConnection connection = ...) 
    { 
     ... 
    } 
    ... 
} 

이 점에 대해 싫어하는 점은 무엇입니까?

+0

내가 싫어하는 점은 각 방법에서해야한다는 것입니다. 이 이중화를 둘러싼 어떤 방법이 있어야 할 것 같습니다. –

+0

다양한 비트 (예 : 연결 문자열 가져 오기 및 연결 만들기)를 캡슐화 할 수 있지만 더 좋은 방법은 없습니다. ORM을 사용할 수도 있지만 여전히 동등한 가치가 있습니다. – Joe

+0

답변에 +1을 주었지만, OperationContract에 대한 연결 및 동시성에 대한 처리 방법이있는 것처럼 보입니다. – Paparazzi

관련 문제