2009-04-04 5 views
1

나는 가능한 통신 프레임 워크로 WCF를 사용하여, 클라이언트/서버 모델을 사용하여 풍부한 기능을 갖춘 응용 프로그램을 만들 찾고 있어요.WCF 클라이언트/서버 모델

(내가 netTcpBinding를 사용하는 거라고 WCF와 그래서) 내가 Windows 서비스에서 서비스 (들)을 개최한다.

지금, 나는 하나의 서비스 계약으로 모든 서비스 작업을 정의 할 수 있습니다 생각하지만, 거기에 꽤 많은 작업을 할 수 있고 차라리 여러 응집 서비스 계약을 나눌 것입니다.

내가 별도의 포트에 각 서비스를 호스팅해야합니다 의미하는 것이 서비스 계약의 집합으로 나의 작업을 분할시겠습니까? (나는 하나 개의 포트에서 실행하는 것을 선호 싶지만 그건 이상하지 않을 것입니다.)이 시나리오에 대한

모든 디자인 팁? 감사합니다 :)

업데이트 혼란을

죄송합니다 - 단지 현명 그룹을에, 다른 계약의 각 모든 서비스 작업을 호스트 할 의도는 아니 었습니다. 내 문제는 한 포트에서 여러 ServiceHost를 호스팅 할 수 없다고 생각했기 때문입니다.

<는 이마>

조 단순히 하나 개의 포트에 여러 서비스 호스트를 호스트 할 수 있다고 때려. 나는 이것을 원래 시도 할 때 예외 메시지를 오해 했음에 틀림 없다고 생각합니다. 이 기능을 작동 시키면 내가 선호하는 해결책이 될 것이라고 생각합니다.

나는 하나의 구체적인 개체의 각 인터페이스를 구현하고 하나의 ServiceHost를에 호스팅의 @Koystya 공동의 접근 방식은 또한 내 질문에 좋은 실용적인 해결책이라고 생각합니다. 특히 그 단일 콘크리트 객체를 일종의 Facade로 취급한다면 말이죠. 제가 생각할 수있는 단점은 계약에 따라 다른 ServiceBehaviors를 가질 수 없다는 것입니다.

또한, 나는 그것이 하나 개의 구상 클래스에 여러 서비스 계약을 구현하기 위해 적절한 때의 조의 논리에 동의 않습니다.

답변

2

나는 모든 서비스 작업을 하나의 서비스 계약으로 정의 할 수 있다고 생각하지만, 꽤 많은 작업이있을 수 있으며 몇 가지 응집력있는 서비스 계약으로 나누고 싶습니다.

작업을 응집력있는 서비스 계약으로 그룹화하는 것이 좋습니다. 입도 (서비스 계약에 따라 작업의 예를 들면, 수) 응용 프로그램에 따라 다릅니다 만, 작업 당 하나의 서비스 계약은 극단적 인 것 같다.

는 서비스 계약의 집합으로 나의 작업을 분할겠습니까 나는 전혀 별도의 포트

되지 않음에 각 서비스를 호스팅해야한다는 것을 의미, 당신은 같은 포트에 여러 서비스 계약을 할 수 있습니다.

여러 서비스 계약 as suggested by Koistya Navin .NET을 구현하는 구체적인 클래스를 사용할 수 있습니다. 그러나 :

  • 이것은 내부 구현 세부 사항입니다.

  • 작업 계약 구현이 너무 밀접하게 관련되어 단일 클래스로 구현하는 것이 타당한 경우에만이 작업을 고려해야합니다.

  • 이러한 경우 동일한 서비스 계약에 포함시키는 것이 좋습니다.

+0

감사합니다 조. 당신은 이렇게 말합니다. "전혀 그렇지 않습니다. 동일한 포트에서 여러 가지 서비스 계약을 체결 할 수 있습니다." 이것을 구현하기위한 나의 선택은 무엇입니까? (@ Koistya의 주장과는 별도로) – chardy

+0

@Chris, 여러 개의 ServiceContract 인터페이스와 하나의 구체적인 구현체를 만들지 않으시겠습니까? (이 하나의 클래스를 여러 개의 부분 클래스로 나눠서 프로젝트 구조를보다 잘 조직 할 수 있습니다.) 그리고 나머지는 .config 파일에서 수행됩니다. –

+0

프로세스 간을 공유하고 싶지 않다면 포트 공유에 특별한 방법이 없습니다. Net.Tcp 포트 공유). 나는 일반적으로 IIS에서 호스팅하여 메시지 기반 활성화 등의 이점을 얻습니다. 그러나 자체 호스팅을 사용하면 동일한 포트로 여러 ServiceHost를 생성 할 수 있습니다. – Joe

2

서비스는 여러 서비스 계약을 노출 할 수 있습니다.

I 자체가 속성 [의 ServiceContract] 여러 인터페이스를 구현 한 클래스로 구현 WCF 서비스를 만들 것입니다.

@Koistya으로
0

은 가능하다 썼다. 여기 그리고는 완벽한 예입니다 example.

1

왜 각 작업을 자체 서비스 계약으로 고려합니까? 그것으로부터 무엇을 얻으려고합니까?

기본적으로 서비스 계약에는 [OperationContract]로 표시된 작업이 원하는만큼있을 수 있습니다. 그것은 아마 더 이해할 수 있습니다.

이질적인 기능을 가진 경우 둘 이상의 ServiceContract를 인터페이스로 정의 할 수 있으며 서비스 클래스에서 모두 서비스 클래스를 구현하고 단일 Service 클래스 (모든 ServiceContract 인터페이스 사용)를 단일 주소에 호스트 할 수 있습니다 (포트 포함).

[ServiceContract] 
public interface IMyService1 
{ 
    [OperationContract] 
    void SomeOperation1; 

    [OperationContract] 
    void SomeOperation2; 
} 

[ServiceContract] 
public interface IMyService2 
{ 
    [OperationContract] 
    void SomeOperation21; 

    [OperationContract] 
    void SomeOperation22; 
} 

public class MyServiceClass : IMyService1, IMyService2 
{ 
    void SomeOperation1; 
    void SomeOperation2; 
    void SomeOperation21; 
    void SomeOperation22; 
} 

마크

관련 문제