2014-06-20 3 views
0

app.config 파일의 끝점 주소를 동적으로 변경하려고했습니다. 주소를 인쇄 할 때 변경된 후에 변경된 주소를받습니다. 그러나 서비스는 그 주소를 사용하지 않는 것 같습니다. 잘못된 주소를 입력하더라도 작동하는 것처럼 보입니다. 기본 주소를 사용하는 것 같습니다. 도와주세요. 내 코드는 다음과 같습니다.변경된 주소에서 WCF 서비스가 호출되지 않는 이유는 무엇입니까?

static void UpdateAppConfig(String Name) 
    { 
     var doc = new XmlDocument(); 
     doc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 
     XmlNodeList endpoints = doc.GetElementsByTagName("endpoint"); 
     foreach (XmlNode item in endpoints) 
     { 
      var addressAttribute = item.Attributes["address"]; 
      if (!ReferenceEquals(null, addressAttribute)) 
      { 
       addressAttribute.Value = "http://" + Name + "/test1/test2.svc"; 

      } 
     } 
     doc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 
    } 

답변

0

서비스 인스턴스 작성 자체에서 서비스 주소를 제어 할 수 있습니다. 구성 파일을 업데이트 할 필요가 없습니다 (필요하지 않은 경우).

체크 아래의 간단한 구현은,이 방법은 당신에게 서비스 클라이언트를 줄 것이다는 (은 ServiceClient 프록시로 가정).

public ServiceClient EndpointAddressConfiguration() 
    { 
     ServiceClient newClient = new ServiceClient("httpBindinConfigName","http://hostname/service.svc"); 
     return newClient; 
    } 

여기에 우리가 바인딩 구성을 기존의 활용 (httpBindinConfigName는 구성 섹션에 있음). 필요한 경우 바인딩 구성도 변경할 수 있습니다.

1

app.config는 처음 읽을 때 프로세스에 의해 캐시됩니다. 런타임에 구성 파일을 변경하려면 캐시를 지우고 다시 읽어야합니다. 다음을 호출하여이 작업을 수행 할 수 있습니다.

또한 app.config를 거치지 않고 끝점 주소를 변경할 수도 있습니다. WCF 클라이언트 인스턴스에 Endpoint 속성 만 설정하면됩니다.

+0

주소를 변경하기 전에 주 메서드에 해당 줄을 추가 한 후에도 이전 주소로 이동하여 찾을 수 없다는 메시지가 나타납니다. –

+0

주소를 변경 한 후에 ** RefreshSection() **을 수행해야합니다. –

+0

주소를 변경 한 후에도 배치했지만 아직 개선되지 않았습니다. SaveEndpointAddress ("http : //adsad-6/test1/test2.svc"); ConfigurationManager.RefreshSection ("// system.serviceModel // client"); 매번 2 번 째 맞습니다 ... 어떤 생각? : ( –