Giriş

C# ile Windows Communication Foundation (WCF) üzerinde çalışırken, geliştiricilerin genellikle uygulamalarının App.config dosyasında tanımlanan belirli yapılandırma ayarlarına erişmeleri gerekir. Yaygın bir gereksinim, system.serviceModel yapılandırmalarına erişimdir. Ancak, birçok geliştirici ConfigurationManager üzerinden erişildiğinde beklenen bölümün null döndüğü sorunuyla karşılaşmaktadır. Bu blog yazısı bu sorunu ele almakta ve detaylı bir çözüm sağlamaktadır.

Sorun

Zorluk, WCF servis modeli yapılandırmasının nasıl yapılandırıldığı ile ilgilidir. Geliştiriciler, system.serviceModel bölümünü alan aşağıdaki kodu kullanarak almaya çalışırken:

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

null aldıklarını fark edebilirler. Ancak, appSettings gibi farklı bir bölümü sorgularken her şey mükemmel çalışır:

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

Bu sorun, WCF uygulamalarında yapılandırma bölümlerinin nasıl yüklendiği konusunda temel bir yanlış anlamanın olduğunu göstermektedir.

Çözüm

system.serviceModel yapılandırma bölümünü başarılı bir şekilde yüklemek için farklı bir yaklaşım kullanmalısınız. İşte nasıl yapılacağı:

Yapılandırma Gruplarını Anlamak

Yapılandırma dosyasındaki system.serviceModel öğesi, sadece bir bölüm değil, bir yapılandırma bölüm grubu temsil eder. Bu ayırım hayati öneme sahiptir, çünkü ConfigurationManager.GetSection kullanarak erişim sağlamaya çalışmak istediğiniz sonucu vermez.

Doğru Yöntemi Kullanma

Bölümü doğrudan almak yerine, tüm bölüm grubunu almak için ServiceModelSectionGroup sınıfını kullanmalısınız:

var serviceModelGroup = System.ServiceModel.Configuration.ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));
  • Adım 1: ServiceModelSectionGroup üzerinde GetSectionGroup() çağrısı yapın ve uygulamanızın mevcut yapılandırmasını geçin.
  • Adım 2: Dönen serviceModelGroup içinden belirli ayarları alın.

Örnek: Servis Uç Noktasına Erişim

Yapılandırmadaki servis uç noktasının adresini nasıl çıkarabileceğinize dair bir örnek:

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

if (serviceModelGroup != null)
{
    var endpointAddress = serviceModelGroup.Client.Endpoints[0].Address.ToString();
    Console.WriteLine($"Servis Uç Noktası Adresi: {endpointAddress}");
}
else
{
    Console.WriteLine("ServiceModelSectionGroup null.");
}

Anahtar Bilgiler

  • Her zaman system.serviceModel’in sadece bir bölüm değil, bir grup olduğunu hatırlayın.
  • WCF yapılandırmasını almak için ServiceModelSectionGroup.GetSectionGroup() kullanın.
  • Bu yaklaşım, manuel yapılandırma dosyası yükleme veya XPath ile ilgili olası hack’lerden kaçınmanızı sağlar.

Sonuç

C# .NET uygulamanızda system.serviceModel yapılandırmasına erişmek, yapılandırma bölümleri ve gruplarının yapısını anladıktan sonra oldukça basit hale gelebilir. ServiceModelSectionGroup‘u kullanarak, gerekli WCF ayarlarını kolaylıkla alabilirsiniz ve null referanslarla karşılaşmadan işlemlerinizi gerçekleştirebilirsiniz. Bu yöntem, uygulamalarınızdaki WCF yapılandırmasını yönetmek için daha temiz ve sağlam bir çözüm sunar.

Daha fazla bilgi için resmi belgelere Microsoft Docs adresinden göz atabilirsiniz.

İyi kodlamalar!