2011-07-04 5 views
1

.NET Remoting을 사용하여 WCF를 사용하는 기존 프로젝트를 변환하려고합니다. 다음과 같이 프로젝트의 구조는 다음과 같습니다WCF에 .NET Remoting - 순환 종속성을 피하기위한 솔루션 구성

  • UI BusinessLayer 프로젝트는 클라이언트 활성 개체 방법 IResult Process(IJobProcessor)을 가지고 DistributedProcessor를 포함하는 클래스 라이브러리입니다

  • BusinessLayer. IJobProcessorIResult 인터페이스와 구체적인 클래스는 모두 BusinessLayer 라이브러리 내에 있습니다. IJobProcessor의 구체적인 클래스는 BusinessLayer에서 많은 클래스를 사용합니다.

    .NET의 경우이 상황이 이상적입니다. 분산 된 부분은 BusinessLayer를 포함하고 특정 포트에서 수신 대기하는 Windows 서비스입니다. 클라이언트 측은 Activator.GetObject()을 사용하여 원격 객체를 생성합니다. BusinessLayer

  • 참조 - 참조
  • WcfService을 WcfService -

    • UI
    • BusinessLayer가 :

      는 WCF이 변환하려면 나는 다음과 같이 내가 프로젝트를 구성하면 내가 순환 종속성의 문제가 실현

      서비스를 통해 BusinessLayer에 대한 참조가 필요하므로 전선으로 객체를 전송할 수 있습니다. BusinessLayer는 WcfService에 대한 IResult Process(IJobProcessor) 메서드를 호출 할 수 있도록 WcfService에 대한 참조가 필요합니다.

      내가 같은 밖으로 별도의 프로젝트 BusinessLayerDistributed로 인터페이스 IResultIJobProcessor를 이동할 수 :

    • BusinessLayer

      • UI - 참조
      • WcfService BusinessLayerDistributed BusinessLayerDistributed - BusinessLayer 참조를,
      • 을 BusinessLayerDistributed

      제 질문은 : 이러한 모든 인터페이스의 구체적인 클래스가 BusinessLayer에있는 경우 서비스로 전송 될 때 IResultIJobProcessor 개체가 구체적인 클래스로 제대로 수분 될 것입니까? WCF에서이 작업을 수행하는 데 어떤 트릭이 있습니까?

  • +0

    일부 프로젝트의 경우이 방법을 큰 성공으로 사용했습니다. – ChaosPandion

    답변

    0

    비즈니스 계층이 서비스 계층에서 어떤 것을 호출해야하는 이유는 무엇입니까? 비즈니스 계층은 서비스 외관 계층에 대한 지식이 없어야합니다. 일반 서비스는 클라이언트에서 호출됩니다. 서비스 구조에서는 의미가 없으므로 비즈니스 계층에서 가져온 것이 아닙니다.

    유일한 예외는 양방향 (양방향) 통신 일 수 있지만 이러한 아키텍처에서도 어셈블리에서 순환 의존성을 사용하지 않습니다. 이를 방지 할 수있는 패턴이 있습니다. 예를 들어 비즈니스 계층은 이벤트를 가질 수 있고 서비스 계층은이를 구독 할 수 있습니다. 서브 스크립 션은 비즈니스 계층을 참조하는 서비스 서비스 계층에서 수행됩니다. 이벤트가 마음에 들지 않으면 Observer GoF 패턴을 사용할 수 있습니다.

    비즈니스 로직에서 서비스 계층을 호출하는 또 다른 유효한 시나리오는 전체 서비스 지향 아키텍처이지만 이러한 경우 각 "서비스"는 자체 서비스 어셈블리 및 비즈니스 논리 어셈블리를 가지므로 이들 사이에서 상호 호출을 수행합니다.

    +0

    나는 정말로 이해하지 못한다. 필자의 경우에는 이러한 IJobProcessor 객체를 만들어야합니다. 특별히 생성 된 것은 비즈니스 로직의 일부입니다. – robertkroll

    +0

    매개 변수를 예상하는 서비스 계층에 메서드가있는 경우 매개 변수는 클라이언트 요청의 deserialization을 통해 만들어집니다. 다른 모든 비즈니스 계층 클래스는 서비스 작업 자체 또는 서비스 계층 부트 스트 래퍼에서 인스턴스화됩니다. –