소개

C#에서 Windows Communication Foundation(WCF)을 사용할 때, 개발자들은 종종 응용 프로그램의 App.config 파일에 정의된 특정 구성 설정에 접근해야 합니다. 일반적인 요구 사항 중 하나는 system.serviceModel 구성에 접근하는 것입니다. 그러나 많은 개발자들이 ConfigurationManager를 통해 해당 섹션에 접근했을 때 기대했던 섹션이 null을 반환하는 문제에 직면합니다. 이 블로그 게시물은 이 문제를 다루고 자세한 해결책을 제공합니다.

문제

문제는 WCF 서비스 모델 구성의 구조에서 발생합니다. 개발자는 다음 코드를 사용하여 system.serviceModel 섹션을 검색하려고 할 때:

var serviceModelSection = ConfigurationManager.GetSection("system.serviceModel");

null을 받는 것을 확인할 수 있습니다. 하지만 appSettings와 같은 다른 섹션을 조회할 때는 완벽하게 작동합니다:

var appSettingsSection = ConfigurationManager.GetSection("appSettings");

이 문제는 WCF 응용 프로그램에서 구성 섹션이 로드되는 방식에 대한 근본적인 오해를 나타냅니다.

해결책

system.serviceModel 구성 섹션을 성공적으로 로드하려면 다른 접근 방식을 사용해야 합니다. 방법은 다음과 같습니다:

구성 그룹 이해하기

구성 파일의 system.serviceModel 요소는 단순한 섹션이 아니라 구성 섹션 그룹을 나타냅니다. 이 구별은 중요합니다. 왜냐하면 ConfigurationManager.GetSection을 사용하여 접근하려고 하면 원하는 결과를 얻지 못하기 때문입니다.

올바른 방법 사용하기

섹션을 직접 가져오는 대신, ServiceModelSectionGroup 클래스를 사용하여 전체 섹션 그룹을 검색해야 합니다:

var serviceModelGroup = System.ServiceModel.Configuration.ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));
  • 1단계: 현재 응용 프로그램 구성으로 ServiceModelSectionGroup에서 GetSectionGroup()을 호출합니다.
  • 2단계: 반환된 serviceModelGroup에서 특정 설정에 접근합니다.

예제: 서비스 엔드포인트 접근하기

다음은 구성에서 서비스 엔드포인트 주소를 추출하는 방법의 예제입니다:

var serviceModelGroup = System.ServiceModel.Configuration.ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));

if (serviceModelGroup != null)
{
    var endpointAddress = serviceModelGroup.Client.Endpoints[0].Address.ToString();
    Console.WriteLine($"서비스 엔드포인트 주소: {endpointAddress}");
}
else
{
    Console.WriteLine("ServiceModelSectionGroup이 null입니다.");
}

주요 요점

  • system.serviceModel은 단순한 섹션이 아니라 섹션 그룹이라는 점을 항상 기억하십시오.
  • WCF 구성을 검색하기 위해 ServiceModelSectionGroup.GetSectionGroup()을 사용하십시오.
  • 이 방법은 수동 구성 파일 로딩이나 XPath와 관련된 해킹의 가능성을 예방합니다.

결론

C# .NET 응용 프로그램에서 system.serviceModel 구성에 접근하는 것은 구성 섹션과 그룹의 구조를 이해하면 간단해질 수 있습니다. ServiceModelSectionGroup을 활용하면 null 참조에 빠지지 않고 필요한 WCF 설정을 쉽게 검색할 수 있습니다. 이 방법은 응용 프로그램 내에서 WCF 구성을 처리하기 위한 더 깨끗하고 견고한 솔루션을 제공합니다.

자세한 사항은 Microsoft Docs를 참조하십시오.

행복한 코딩 되세요!