2010-12-06 9 views
1

내가 전에 기본 주소에 instanceName을 추가 WCF 서비스 호스트를 시작으로 호스트의 기본 주소를 조정하려고를 다시 작성하지 않고도 서비스 호스트의 기본 주소를 수정 다음과 같은 같습니다응용 프로그램 구성 파일

<services> 
    <service name="MyCompany.Common.Csla.WcfPortal" 
     behaviorConfiguration="serviceBehavior"> 
    <endpoint contract="Csla.Server.Hosts.IWcfPortal" 
       binding="customBinding" 
       bindingConfiguration="compressed_httpConfig"/> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8001/MyAgent" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

동기 부여 : 나는 동일한 시스템에서 동일한 에이전트 프로세스를 여러 번 실행할 수 있도록하려면. 각 인스턴스는 명령 행에서 고유 한 이름을 가지며 호스트 기본 주소에 통합되어야합니다. app.config에 baseAddresses 컬렉션이 전혀 포함되어 있지 않으면이 작업을 쉽게 수행 할 수 있습니다. 그러나 인스턴스 이름을 지정하지 않고 단일 에이전트 프로세스가 실행될 경우에 대비해보고 싶습니다.

문제는 서비스 호스트가 생성자에 지정된 기본 주소를 app.config에 표시된 주소와 병합한다는 것입니다. 당연히 예외로 실패합니다. http 스키마로 두 개의 주소를 발견하기 때문입니다.

또한 실행중인 인스턴스에 따라 WCF 주소를 수정하려고 할 때 주류 WCF 철학을 따르고 있습니까? 내가 해킹의 미로에서 길을 잃은 경우 - 주요 도로로 돌아가는 길을 보여주십시오.

답변

0

실제 간단한 접근 방법을 생각해보십시오. 기본 주소가없는 경우 이미 인스턴스에 연결하는 방법이있는 경우 기본 주소를 제거합니다. 그런 다음 기본 주소와 기본 인스턴스 이름을 app.config appsetings 섹션에 배치합니다. 그런 다음 코드에서 명령 행에 주어진 기본 주소와 인스턴스 이름을 결합하거나 인스턴스 이름이 지정되지 않은 경우 appSettings의 DefaultInstance 이름을 사용하십시오.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="BaseAddress" value="http://localhost:8001/" /> 
    <add key="DefaultInstance" value="MyAgent" /> 
    </appSettings> 
</configuration> 

전체 공개의 경우이 코드를 사용하여이 값을 쉽게 읽을 수 있습니다.

System.Configuration.ConfigurationManager.AppSettings["BaseAddress"] 
+0

이것은 현재 작동하는 방식입니다. 나는 실제로 디스크에 저장하지 않고 프로그래밍 방식으로 유기 WCF 구성을 수정할 수 있는지 여부를 아는 데 특히 관심이 있습니다. – mark

관련 문제