2010-06-21 5 views
6

서비스의 구성 파일에 지정된 끝점을 가진 WCF Windows 서비스가 있습니다.구성 파일 무시 WCF 코드의 기본 주소

<baseAddresses> 
    <add baseAddress="net.tcp://localhost:9000/MyEndpoint"/> 
</baseAddresses> 

모두 괜찮습니다. 그러나 어떤 경우에는 포트 9000이 이미 사용 중이므로 ServiceHost가 Open()에서 넘어지게됩니다. 코드에서 구성 파일에 지정된 기본 기본 주소를 무시할 수 있어야합니다. 예 : 환경 변수에 사용할 포트 번호가 있다고 가정합니다.

프로그래밍 방식으로 어떤 방법이 있습니까?

ServiceHost가 생성 된 후 구성 파일에서 가져온 Uri 목록을 반환하는 BaseAddresses 속성을 볼 수 있습니다. 그러나 이것은 읽기 전용 콜렉션이므로 기본값을 변경하는 데 사용할 수 없습니다.

내가 ServiceHost를 생성자에서 교체 열린 우리당을 지정하면

나는

가이 컬렉션은 이미 구성표 net.tcp과 주소를 포함 얻을. 이 컬렉션의 스키마 당 최대개의 주소를 사용할 수 있습니다. 서비스입니다 는 IIS에서 호스팅되는 경우에 당신은 '는 system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters'참 '는 system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' 을 을 설정하거나 지정하여 문제를 해결할 수 있습니다.

CustomServiceHost를 만들고 대체 기본 주소를 설정하려고하면 동일한 오류가 발생합니다. 즉, 내가 새로운 기지를 지정할 수 있습니다 -

class CustomHost : ServiceHost 
{ 
    public CustomHost(Type serviceType) : base (serviceType)   
    { 
    } 
    protected override void ApplyConfiguration() 
    { 
     base.ApplyConfiguration(); 

     this.AddBaseAddress(new Uri("net.tcp://localhost:9010/MyEndpoint")); 
    } 
} 

은 내가 빈 설정 파일의 기본 주소를 떠나 잘 작동 그 다음 ServiceHost를 생성자에 기본 주소를 전달하면 것을 알고있다. 그러나 config 파일을 사용하여 하드 코딩 대신 기본값을 지정하고 싶습니다.

답변