나는 여러 계약을 가진 서비스를 보유하고 있습니다.WCF 중복 메소드 이름을 가진 여러 계약
[ServiceContract]
public partial interface IBusinessFunctionDAO {
[OperationContract]
BusinessFunction GetBusinessFunction(Int32 businessFunctionRefID);
[OperationContract]
IEnumerable<Project> GetProjects(Int32 businessFunctionRefID);
}
[ServiceContract]
public partial interface IBusinessUnitDAO {
[OperationContract]
BusinessUnit GetBusinessUnit(Int32 businessUnitRefID);
[OperationContract]
IEnumerable<Project> GetProjects(Int32 businessUnitRefID);
}
다음과 같이 각 인터페이스를 명시 적으로 구현했습니다. 그래서 이것은 잘 컴파일하고 완벽하게 유효한 당신이 볼 수 있듯이
public class TrackingTool : IBusinessFunctionDAO, IBusinessUnitDAO {
BusinessFunction IBusinessFunctionDAO.GetBusinessFunction(Int32 businessFunctionRefID) {
// implementation
}
IEnumerable<Project> IBusinessFunctionDAO.GetProjects(Int32 businessFunctionRefID) {
// implementation
}
BusinessUnit IBusinessUnitDAO.GetBusinessUnit(Int32 businessUnitRefID) {
// implementation
}
IEnumerable<Project> IBusinessUnitDAO.GetProjects(Int32 businessUnitRefID) {
// implementation
}
}
나는 두 GetProjects (INT) 방법을 가지고 있지만, 각각의 하나는 명시 적으로 구현된다. 이 문제는 제가 실제로 이것을 서비스로 시작할 때 발생합니다. TrackingTool에 이미 GetProject 정의가 포함되어있어 오류가 발생합니다. 그것이 사실이지만 다른 서비스 계약의 일부입니다. WCF는 메서드 이름을 생성 할 때 서비스 계약을 구분하지 않습니까? 서비스 계약을 구별 할 수있는 방법이 있습니까?
내의 app.config는 어떤 도움을 주시면 감사하겠습니다이
<service name="TrackingTool">
<endpoint address="BusinessUnit" contract="IBusinessUnitDAO" />
<endpoint address="BusinessFunction" contract="IBusinessFunctionDAO" />
</service>
것 같습니다.
감사합니다, 라울
@monO는 답변에서 언급했듯이 실제 개별 메소드 이름은 서비스 클래스에서 고유해야합니다. WSDL은 인터페이스와 모든 것에 대해 아무것도 모르고 다른 매개 변수로 메소드 오버로딩을 허용하지 않습니다. 이러한 메소드 이름을 전체 서비스 클래스에서 고유하게 만들 필요가있다. –
아, WSDL이 실제로 어떻게 생성되었는지 읽어야합니다. 각 계약에는 WSDL 내부에 자체 네임 스페이스가 있다고 생각했습니다. – HaxElit
... 실제로 나는 그것도 매우 혼란 스럽다. @marc_s : WSDL은 다른 인터페이스에 대해 알고 있습니다. 그들은 전용 바인딩으로 전용 포트로 노출됩니다. – Alex