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
üzerindeGetSectionGroup()
ç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!