2012-04-23 1 views
63

이가 C#으로 허용되는 ServiceContractWCF에서 메서드 오버로드가 허용되지 않는 이유는 무엇입니까?

[ServiceContract] 
public interface MyService 
{ 
    [OperationContract] 
    int Sum(int x, int y); 

    [OperationContract] 
    int Sum(double x, double y); 

} 

메소드 오버로딩이라고 가정하지만, WCF는 호스팅 프로그램이 InvalidOperationException 간단히 말해서

+10

저는 이것이 _correct_ 답변인지 확신 할 수 없으므로 코멘트로 게시하겠습니다. 나는 WCF가 가능한 한 많은 프로토콜, 즉 Microsoft 이외의 기술에서도 작동하도록 설계 되었기 때문에 그것이라고 믿습니다. 오버로드는 닷넷과 몇 가지 다른 언어의 기능이지만 전부는 아닙니다. 서비스의 가용성을 최대화하기 위해, 과부하는 허용되지 않습니다. (제 생각에는) – Smudge202

+0

나에게 좋은 대답처럼 보입니다. –

+0

@Sleiman 좋은 발언 칙칙한 –

답변

90

를 호스팅하는 동안 발생합니다 당신이 operation contracts 를 오버로드 할 수 없습니다 오버로드 할 수없는 이유는 WSDL이 C# 내부에있는 동일한 오버로딩 개념을 지원하지 않는다는 사실과 관련이 있습니다. 다음 게시물은 이것이 불가능한 이유에 대한 세부 정보를 제공합니다.

http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx

이 문제를 해결하려면, 당신은 명시 적으로 OperationContractName 속성을 지정할 수 있습니다.

[ServiceContract] 
public interface MyService 
{ 
    [OperationContract(Name="SumUsingInt")] 
    int Sum(int x, int y); 

    [OperationContract(Name="SumUsingDouble")] 
    int Sum(double x, double y); 
} 
26

클라이언트가 호출하는 것입니다 특정 방식을 결정 할 수있는 방법이 없다는 것을 의미 할 것입니다 계약에 같은 방법 이름을 가진, HTTP/SOAP를 통해 호출 할 때 때문입니다.

http를 통해 웹 메소드를 호출 할 때 인수는 선택 사항이며 누락 된 경우 기본값으로 초기화됩니다. 즉, 두 메소드 호출은 HTTP/SOAP를 통해 똑같은 방식으로 보일 수 있습니다.