2009-06-08 3 views
2

내 dev 및 테스트 WCF 서비스를 참조한다는 점을 제외하고는 동일하게 만드는 객체가 2 개 있습니다. 기본적으로 이들은 서비스 자체의 객체이며 WCF 데이터 계약에 의해 생성 된 DTO의 객체입니다.기타 질문 : 같은 논리를 2 개의 유사한 객체에 적용하는 것

내 테스트 클라이언트에서 dev WCF 서비스와 관련된 2 개의 개체 또는 테스트 WCF 서비스와 관련된 2 개의 개체를 만듭니다. 그런 다음 서비스 계약 등을 테스트하기 위해 동일한 로직을 적용합니다.

OO 원칙을 사용하여이 로직을 구조화하는 가장 좋은 방법은 무엇입니까?

다음은 내가 작성한 개체입니다. 첫 번째 세트는 "ASRServiceClient"입니다. 두 번째 집합은 "ASRTestServiceClient"에서 가져옵니다.

ASRService.ASRServiceClient svc = new ASRService.ASRServiceClient(); 
ASRService.ASRItem tr1 = new ASRService.ASRItem(); 
+2

다른 사람이보고 싶으면 제목에 질문을 적어주세요. – Macke

답변

4

왜 당신은 당신이에 연결하는 어떤 서비스를 기반으로 클라이언트 코드를 수정해야합니까? 2 개의 다른 .config 파일을 가질 수 없습니까? 하나는 dev 서비스에 대한 연결을 포함하고 다른 하나는 테스트 서비스에 대한 연결을 포함합니까? 테스트/dev 모드를 기반으로 .config 파일을 전환하면됩니다.

물론 서비스 계약은 인터페이스이며 개발자 및 테스트 버전 모두 동일한 계약 인터페이스를 사용하지만 사용자가 묻는 것 같지 않습니다.

편집 : 당신의 서비스에 대한

압축을 풉니의 ServiceContract 인터페이스 아직 수행하지 않은 경우. 개발자와 테스트 서비스 모두 인터페이스를 구현해야합니다. 이런 식으로 뭔가 :

[ServiceContract(Namespace="http://stackoverflow.com/questions/965977")] 
public interface IASRService 
{ 
    [OperationContract] 
    ASRItem GetASRItem(); 
} 

귀하의 app.config (또는 Web.config의) 클라이언트에 대한 파일이 {namespace}이 인터페이스의 네임 스페이스의 위치입니다 같은 것을 포함해야합니다. 단일 .config 파일에 둘 다 보관하려면이 방법이 유용합니다.

<system.serviceModel> 
    <client> 
    <endpoint name="ASRService" address="http://yourserver.com/ASRService" 
       contract="{namespace}.IASRService" binding="basicHttpBinding"/> 
    <endpoint name="ASRServiceTest" address="http://localhost/ASRService" 
       contract="{namespace}.IASRService" binding="basicHttpBinding"/> 
    </client> 
</system.serviceModel> 

서비스를 사용하는 클라이언트의 코드는 다음과 같습니다. ChannelFactory 생성자에서 구성의 이름을 지정하십시오. 중 프록시의 유형부터

ChannelFactory<IASRService> cfTest = new ChannelFactory<IASRService>("ASRServiceTest"); 
IASRService proxyTest = cfTest.CreateChannel(); 

ASRItem TestServiceItem = proxyTest.GetASRItem; 

ChannelFactory<IASRService> cf = new ChannelFactory<IASRService>("ASRService"); 
IASRService proxy = cf.CreateChannel(); 

ASRItem DevServiceItem = proxy.GetASRItem; 

또는

항상 IASRService, 당신은 그 개체 만 조작하는 인터페이스 유형에 대해 알 필요가있는 코드입니다. 객체를 생성 한 서비스의 버전은 신경 쓰지 않아야합니다.

또한 Michele Leroux Bustamante가 Learning WCF으로 책을 권하고 싶습니다. 이 모든 것을하는 방법에 대한 훌륭한 예!

+0

좋은 생각 인 것 같습니다. 프로그래밍 방식으로 설정 파일을 변경하는 간단한 방법이 있습니까? – alchemical

1

인터페이스를 사용하십시오.

0

나는 인터페이스를 사용하고 런타임에 어떤 구체적인 클래스를 만들지 결정하는 설정 파일을 가지고 있습니다.

0

을 사용하면 서브 클래스에 서비스에 대한 환경 특정 데이터를 캡슐화 할 수 있습니다. 그러나 이것은 패턴의 문제가 아닐 수도 있습니다. 환경 별 구성 파일을 갖는 것이 가장 좋습니다.

관련 문제