2010-04-13 2 views
0

저는 약 10 건의 계약을 지원하는 WCF 서비스를 보유하고 있으며,이 클라이언트와 관련된 모든 비즈니스 규칙을 가진 클라이언트를 지원하고 있습니다. 이제 똑같은 계약을 사용할 다른 클라이언트가 생겼습니다. 그것들을 바꾸면) 그들은 이전의 클라이언트가 지금 호출했던 것과 똑같은 방식으로 서비스를 호출 할 것입니다. 우리가 두 클라이언트를 구별 할 수있는 유일한 방법은 입력 매개 변수 중 하나입니다. 이 입력 매개 변수를 기반으로 약간 다른 비즈니스 로직을 사용해야합니다. 두 클라이언트의 로직은 나머지 로직이 (비즈니스/DAL 레이어에서) 동일한 50 %입니다. 나는 각각의 계약 구현에서 else 문을 사용하여 논리를 차별화하고 재 라우팅하는 방법을 사용하고 싶지 않습니다. 다른 클라이언트가 들어 오면 어떻게 될까요? 이와 같은 상황을 처리하는 깨끗한 방법이 있습니까? 3.5 프레임 워크를 사용하고 있습니다. 마찬가지로 나는 새로운 클라이언트에 대한 계약 (서비스/데이터 계약)이나 현재의 서비스 호출 인프라를 변경할 수 없다고 말했습니다. 감사합니다WCF 비즈니스 논리 처리

답변

0

아마도 두 번 서비스를 호스팅하고 클라이언트가 올바른 서비스에 연결할 수 있습니까? 그것과 별개로, 당신은 일종의 if-else를 사용해야합니다.

0

나는이 당신에게 적용 할 수 있는지 여부를 말할 수는 없지만, 우리는이 경로를 따라 비슷한 문제를 해결 한 :

  • 우리는 몇 가지 논리가 호출되는 환경에서의 메시지에 헤더 정보를 추가를 .
  • 이 정보는 RequestContext 클래스에서 끝납니다.
  • 우리는 우리는 컨테이너에 의해 제공 될 수있는 방법을 특정 구성 요소 전략 정의
  • (우리의 경우 StructureMap에)는 DI 컨테이너에 계약의 구현을 인스턴스화의 책임을 위임 :
    • 이 있습니다를 어떤 종류의 구성 요소에 대한 기본값.
    • 특성을이 특성화 유형을 사용해야하는 유형을 나타내는 전문화에 배치 할 수 있습니다.
  • 이 우리는 지금 설명한 과정을 적용하는 방식으로 해결 된 서비스 구현의 ObjectFactory.With(requestcontext).getInstance<CONTRACT>()
  • 종속성을 진술하여 컨테이너에 전화를 사용할 수 메커니즘
  • 을 통해 컨테이너에 등록됩니다. 즉, 전문화는 최종적으로 헤더에있는 요청 정보를 기반으로 제공됩니다.

이것은 어떻게 해결할 수 있는지 예입니다.

관련 문제