2013-01-16 5 views
6

두 끝점이있는 WCF 서비스에 대한 참조가 추가되었습니다.이름과 계약이있는 끝점 요소를 찾을 수 없습니다.

<client> 
    <endpoint name="ABCServiceV1" address="http://staging.ABCwebservices.com/ABC/Service.svc" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV1" 
    contract="ABCService.IService" /> 
    <endpoint name="ABCServiceV2" address="http://staging.ABCwebservices.com/ABC/Service.svc/20" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV2" 
    contract="ABCService.IService1" /> 
</client> 

클라이언트를 작성하는 코드로 다음과 같습니다 :하여 구성 파일에 추가됩니다 다음 서비스 추가에 - "할 수 없습니다 그러나

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV2"); 

을, 나는 런타임 오류를 얻고있다 ServiceModel 클라이언트 구성 섹션에서 이름이 'ABCServiceV2'이고 계약 이름이 'ABCService.IService'인 엔드 포인트 요소를 찾으십시오. 이는 응용 프로그램에 대한 구성 파일이 없거나이 이름과 일치하는 엔드 포인트 요소가 클라이언트 요소에서 발견되지 않았기 때문일 수 있습니다 . "

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");을 사용하면 모든 것이 정상적으로 작동합니다. 하지만 ABCServiceV2를 사용하면 ABCService.IService 계약을 찾아야합니다. ABCService.IService1을 찾아야합니다.

올바른 계약서를 찾으려면 어떻게해야합니까?

+0

ABCServiceV2의 주소는 내가 그 그걸로 여부 아무 상관이 있는지 확실하지 않다 ...는 '20'끝에 추가 있습니다. 그냥 관찰. – user959729

+0

나는 종단점을 다르게하기 위해 '20'이 필요하기 때문에 괜찮다고 생각합니다. 서비스의 두 끝점은 SoapUI와 같은 도구에서 정상적으로 작동합니다. 그래서 문제는 클라이언트 코드 어딘가에 있습니다. – ipoh

답변

3

두 번째 참조를 다른 서비스 (ABCServiceV2)에 추가 한 경우 ABCServiceV2에 대한 두 번째 서비스 클래스가 생성 된 것입니다. 두 클래스는 별도의 계약 (ABCService.IService 및 ABCService.IService1)을 구현하므로 엔드 포인트를 교환 할 수 없습니다.

나는 당신이 그렇게처럼 두 서비스 엔드 포인트를 초기화 할 수 있어야한다고 생각 :이 게시물은 오래되어 대답

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); 
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2"); 
+1

감사합니다. 문제는 내가 Service1Client 대신 ServiceClient를 사용하고 있다는 것이 었습니다. 다음 코드는 문제없이 작동합니다. ABCService.Service1Client ABCClient1 = new Service1Client ("ABCServiceV2"); – ipoh

1

에도 불구하고, 대답은 내 경우에는 도움이되지 않았다. 내 문제는 svcutil.exe 도구를 사용하여 서비스 클라이언트를 생성했지만 어떤 네임 스페이스도 지정하지 않았습니다. 따라서 계약 네임 스페이스 이름은 기본적으로 스키마 문서의 대상 네임 스페이스로 생성되었습니다 (예 : total mess).

한편 서비스 참조가 프로젝트에 추가 될 때 생성 된 구성 파일을 사용하려고했습니다. 이 파일의 계약 네임 스페이스는 ServiceReference1 (기본값) 또는 원하는 다른 이름 인 완벽한 폭풍입니다! 하지만 FQN에서 네임 스페이스 부분을 <endpoint>의 계약 속성에서 제거하면 계약이 CLR에 표시됩니다.

희망이 도움이 다른 사람