2011-08-03 2 views
1

지금 다른 호스트로 여러 서비스를 리디렉션 :WCF 클라이언트 구성 -</strong>의 Web.config이처럼 내 <strong>클라이언트에 내가 여러 서비스를,

<endpoint address="http://hostname/ServiceA.svc" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding" 
     contract="ServiceReference.ISearchService" name="ServiceA"> 
</endpoint> 

<endpoint address="http://hostname/ServiceB.svc" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding" 
     contract="ServiceReference.ISearchService" name="ServiceB"> 
</endpoint> 

꽤 좀 더

이의 Web.config 엔드 포인트 주소의 모두와 각각의 "호스트 이름"을 대체해야하기 때문에 호스팅 환경을 전환하는 것이 어렵고 오류가 발생하기 쉽습니다.

어떻게 든 환경 응용 프로그램 설정 또는 나 호스트를 지정하게됩니다 어딘가에 뭔가를 추가하고, 내가 프로그래밍 마법을 할 필요가 또는 내가에서이 작업을 수행 할 수 있습니다 http://{hostA}/ServiceX.svc

이처럼 엔드 포인트가 해결해야 할

구성 혼자?

+0

가능성 관련 : http://stackoverflow.com/questions/2016285/wcf-client-configuration-base-address – lurscher

+1

@marc_s 당신은 예 또는 링크를 제공 할 수 있습니까? 내 서비스가 에 선언되어 있고 본 모든 예에서 기본 주소를 태그 – lurscher

+0

안에 넣었습니다. 죄송합니다. 클라이언트 측베이스에 관한 부분을 놓쳤습니다. 주소는 서버 쪽에서 만 작동합니다. 불행히도 :-( –

답변

2

코드를 통해 수행해야합니다. <system.serviceModel/client> 섹션의 기본 주소에 사용할 수있는 "와일드 카드"가 없습니다. 그러나 "localhost"와 같은 config에서 일부 자리 표시자를 가질 수 있으며 코드에서 먼저 config를로드 한 다음 서버 이름을 실제 값으로 업데이트합니다 (AppSettings 또는 config와 같이 구성에 저장할 수도 있음). 다른 곳).

var factory = new ChannelFactory<ISearchService>("ServiceA"); 
factory.Endpoint.Address = ReplaceServerName(factory.Endpoint.Address); 
var proxy = factory.CreateChannel(); 
... 
+0

+1 예, 이것이 클라이언트 측의 유일한 반쪽 관리 솔루션이 될 것입니다. 클라이언트 측에서 "기본 주소"개념이 너무 좋지 않습니다. –