2010-01-06 4 views
5

동일한 계약을 구현하고 모두 동일한 호스트에있는 모든 서비스 그룹에 WCF 클라이언트를 연결하고 있습니다. 엔드 포인트 정의를 결합하여 구성 혼란을 줄이는 방법이 있기를 바랬습니다. 또한 구성에 따라 프로그램 방식으로하지 않을 것입니다. - 클라이언트 구성을위한 거기에 아무것도 서버 구성의WCF 클라이언트 구성 - 기본 주소?

<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> 

// continued for ServiceC, ServiceD, etc 

는이 목적을 위해 이용 될 수있는 몇 가지 notion of "baseAddressPrefixFilters"이있다 : 바로 지금, 내 설정이 여러 번 반복했다?

답변

3

WCF에 기본 주소 개념이 있습니다. 불행히도, 자체 호스트 인 경우에만 작동합니다. 콘솔 앱 또는 NT 서비스에서 서비스를 호스팅하십시오. 그러나 이는 서버 측에서만 작동합니다. 클라이언트 측과 비슷한 것은 없습니다. 클라이언트 측에서는 항상 엔드 포인트가 연결해야하는 완전한 전체 서비스 주소를 정의해야합니다.

IIS에서 호스트하는 경우 서비스 주소는 서버 이름, 가상 디렉터리 (및 해당 하위 디렉터리) 및 IIS에서 서비스를 호스팅하는 데 사용되는 * .svc 파일의 이름에 의해 결정됩니다. 이것은 고정 시스템 규칙이므로 불행히도 영향을 미칠 수는 없습니다 (.NET 4는 이에 대한 몇 가지 해결책을 제시합니다).

+2

.Net 4에서이 작업을 수행하는 방법에 대한 뉴스는 지금 있습니까? 나는 해결책을 찾기 위해 고심하고있다. – flayn

+0

@flo : [A Developer 's Introduction to WCF 4] (http://msdn.microsoft.com/en-us/library/ee354381.aspx)를 참조하고 '파일없는 활성화'(실제 * .svc 파일)과'ASP.NET Routing과 WCF 통합하기 '를 사용하면 ASP.NET MVC와 같은 경로를 사용하여 서비스 활성화를 정의 할 수 있습니다 (* .svc 확장자없이 "멋진"URL 제공). 두 번째 기능은 REST 기반 서비스 인 것 같습니다 :-( –