Development Tip

WCF에서 메서드 오버로딩이 허용되지 않는 이유는 무엇입니까?

yourdevel 2020. 10. 29. 20:07
반응형

WCF에서 메서드 오버로딩이 허용되지 않는 이유는 무엇입니까?


이것이 ServiceContract

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

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

}

C #에서는 메서드 오버로딩이 허용되지만 WCF는 오버로드를 허용하지 않습니다 operation contracts. 호스팅 프로그램에서 InvalidOperationException호스팅 하는 동안 오류가 발생합니다.


간단히 말해, 메서드를 오버로드 할 수없는 이유는 WSDL이 C # 내부에 존재하는 동일한 오버로딩 개념을 지원하지 않는다는 사실과 관련이 있습니다. 다음 게시물은 이것이 불가능한 이유에 대한 세부 정보를 제공합니다.

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

이 문제를 해결하려면, 당신은 명시 적으로 지정할 수 Name의 속성을 OperationContract.

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

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

HTTP / SOAP를 통해 호출 할 때 계약에 동일한 메서드 이름이 있으면 클라이언트가 호출하려는 특정 메서드를 결정할 방법이 없기 때문입니다.

http를 통해 웹 메서드를 호출 할 때 인수는 선택 사항이며 누락 된 경우 기본값으로 초기화됩니다. 이는 두 메소드의 호출이 HTTP / SOAP에서 정확히 동일한 방식으로 보일 수 있음을 의미합니다.


그 이유는 WCF가 다른 클라이언트에서 보편적으로 사용할 수 있어야하고 해당 클라이언트가 .NET 일 필요가 없으며 Operator/Method overloading프레임 워크에서 허용하지 않을 수도 있기 때문 입니다. 이 경우이 메서드는 해당 프레임 워크에서 사용할 수 없게되므로 보편적으로 사용할 수 있도록 WCF OperationContract는 다른 이름을 지정하는 특성에 이름 속성을 허용하지 않고 제공합니다 . 클라이언트가 .NET 인 경우 WCF는 자동으로이를 메서드 오버로드로 표시하지만 그렇지 않으면 name 속성에 지정된 이름으로 새 메서드를 생성합니다.

참고 URL : https://stackoverflow.com/questions/10276124/why-method-overloading-is-not-allowed-in-wcf

반응형