관리 메뉴

새로운 시작, GuyV's lIfe sTyle.

WCF 메소드 오버로딩 문제 본문

ⓟrogramming/.net

WCF 메소드 오버로딩 문제

가이브 2009. 8. 10. 14:15


WCF에서 메소드 오버로딩시 오류가 발생했다. 전체 리스트를 가져오는 것과 ID값으로 가져오는 것.

서비스 참조 추가시 다음처럼 오류가 난다.



서비스 인터페이스에

        [OperationContract]
        List<SLBCategoryList> SLBCategoryList();

        [OperationContract]
        List<SLBCategoryList> SLBCategoryList(int rootCategory);


와 같이 등록되어 있는데, 설마 메소드 오버로딩이 안되는 것인가..

해서 구글귀신님께 여쭤봤다.

http://jeffbarnes.net/portal/blogs/jeff_barnes/archive/2006/09/20/Overloading-Methods-in-WCF.aspx

귀신님이 알려주신 낯익은 블로그에서..
누가 질문을 했었고. 간단한 답은 된다이다.

내가 친 코드는 C# 문법으론 문제가 없다. 메소드는 같은 이름을 가지고 있고. 그 메소드의 인자는 다르기 때문이다. 
하지만.. WCF는 WSDL로 생성되므로 메시지 기반 통신이며, 상속이나 오버로딩 같은 객체지향 개념을 지원하지 않는다고 한다. 블로그 주인인 Jeff 님하는 여기서 WSDL 구버전에서 지원했었지만 최근버전은 지원이 안된다고 한다. 나 역시 .Net Framework 1.x 때 웹서비스로 뭐 하나 만들때 분명 메소드 오버로딩을 했었던 기억이다. 흠..

여튼, 이런 이유로 WCF는 같은 메소드 이름을 감지하면 코드상에서는 문제없지만 중복됐다고 오류를 내게 된다는데...

이는 다음처럼 해결 가능하다고 한다.


[ServiceContract]
public interface ICalendarService
{
   [OperationContract(Name = "GetScheduledEventsByDate")]
   ScheduledEvent[] GetScheduledEvents(DateTime date);

   [OperationContract(Name = "GetScheduledEventsByDateRange")]
   ScheduledEvent[] GetScheduledEvents(DateTime start, DateTime end);
}


그리고 내 것도 잘 작동한다..

반응형
Comments