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
'Development Tip' 카테고리의 다른 글
sql, A 열로 정렬 한 다음 B 열로 정렬 (0) | 2020.10.29 |
---|---|
Ruby 루프의 첫 번째 반복에서 다르게 작동하는 방법은 무엇입니까? (0) | 2020.10.29 |
문자열 매개 변수를 허용하는 생성자로 클래스 객체를 인스턴스화 하시겠습니까? (0) | 2020.10.29 |
자바 제네릭 슈퍼 키워드 (0) | 2020.10.29 |
Rspec 출력 형식 : 문서 (0) | 2020.10.29 |