2010-03-17 3 views
6

저는 현재 WCF를 통해 많은 방법으로 서비스를 제공하고 있습니다. 단일 서비스가 여러 클래스로 분할되어 각각 다른 기능 세트를 제공하도록 리팩터링하고 싶습니다. 그러나, 나는 여전히 클라이언트에 단일 연결을 갖고 싶어합니다. 이것이 가능한가?단일 끝점을 통해 여러 WCF 서비스를 노출하는 방법이 있습니까?

대답은 '아니오'입니다. 그렇다면이 문제를 어떻게 해결해야합니까? 해결 방법이 있습니까? 아니면 내 생각이 완전히 어리 석고 응용 프로그램의 디자인을 변경해야합니까?

+0

여기 좋은 질문, 유사한 문제 -이 클래스 만 기준으로 더 인터페이스 (서비스 인터페이스입니다) 아니라고 thouh 있습니다. – TomTom

답변

4

E = ABC (끝점 = 주소, 바인딩, 계약)를 기억하십시오. 다른 계약을 체결해도 평등하다고해도 여전히 다른 종점이 있습니다.

그러나 단일 서비스 은 여러 서비스 계약을 구현할 수 있습니다. 이렇게하면 단일 .svc 파일이 .svc와 관련된 URL로 구성된 여러 가지 다른 서비스 계약의 대상이 될 수 있습니다.

0

부분 클래스을 구현하면 단일 인터페이스와 엔드 포인트를 유지하면서 개별 cs 파일에서 컨텐츠를 분리 할 수 ​​있습니다. 이것은 가장 이상적인 방법은 아닙니다. 하루가 끝날 때 여전히 부분 클래스로 구성된 단일 클래스이지만 최소한 파일 구조 에서처럼 보이기 때문에 대규모 클래스 파일이 아닌 분리가 이루어지기 때문입니다. .

구성 예 :

IMyService.cs

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    string GenericMethod() 

    [OperationContract] 
    string GetUsers(int companyId) 

    [OperationContract] 
    string GetMessages(int userId) 

} 

MyService.cs

//Put any attributes for your service in this class file 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public partial class MyService : IMyService 
{ 
    public string GenericMethod() 
    { 
    return ""; 
    } 
} 

UserService.cs

public partial class MyService 
{ 
    public string GetUsers(int companyId) 
    { 
     return ""; 
    } 
} 

MessagingService.cs

public partial class MyService 
{ 
     public string GetMessages(int userId) 
     { 
      return ""; 
     } 
}