WCF 클라이언트 구성 : Endpoint가 구성 파일에 있는지 확인하고 그렇지 않은 경우 코드 폴백을 확인할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1009757

문제

직렬화 된 메시지 객체를 WCF를 통해 서버로 다시 보내는 클라이언트를 만들려고합니다.

최종 개발자 (다른 부서)가 쉽게 할 수있게하려면 클라이언트 엔드 포인트 데이터를 설정하기 위해 구성 파일을 편집하는 방법을 알 필요가 없다는 것이 가장 좋습니다.

즉, 엔드 포인트가 클라이언트에 내장/하드 코딩되지 않았다는 것이 훌륭 할 것입니다.

믹스 시나리오는 나에게 가장 쉬운 솔루션으로 나타납니다.

if (config에 설명) config 파일을 사용하면 하드 코딩 된 엔드 포인트가 폴백됩니다.

내가 알게 된 것은 다음과 같습니다.

  1. new Client(); 구성 파일 정의가없는 경우 실패합니다.
  2. new Client(binding,endpoint); 공장

그러므로:

Client client;
try {
  client = new Client();
}catch {
  //Guess not defined in config file...
  //fall back to hard coded solution:
  client(binding, endpoint)
}

그러나 어떤 방법이 있습니까? 확인하다 구성 파일이 엔드 포인트가 선언되어 있는지 확인하려면 (시도/캐치 외에)?

구성 파일에 정의 된 경우 위의 것이 실패하지 않지만 오른쪽으로 구성되지 않습니까? 두 조건을 구별하는 것이 좋을까요?

도움이 되었습니까?

해결책

다음은 구성 파일을 읽고 데이터를 관리하기 쉬운 객체에로드하는 방법입니다.

Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup csg = c.GetSectionGroup("system.serviceModel");
if (csg != null)
{
    ConfigurationSection css = csg.Sections["client"];
    if (css != null && css is ClientSection)
    {
        ClientSection cs = (ClientSection)csg.Sections["client"];
        //make all your tests about the correcteness of the endpoints here
    }
}

"CS"객체는 구성 파일에있는 모든 속성에 액세스 할 수있는 "endpoints"라는 컬렉션을 노출시킵니다.

"IF"의 "다른"분기를 취급하고 실패 사례로 취급하십시오 (구성은 유효하지 않음).

다른 팁

개선 된 버전을 제안하고 싶습니다 Alexdrenea 솔루션, 구성 섹션에는 특수 유형 만 사용합니다.

Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ServiceModelSectionGroup serviceModelGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);
        if (serviceModelGroup != null)
        {
            ClientSection clientSection = serviceModelGroup.Client;
            //make all your tests about the correcteness of the endpoints here

        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top