Merhabalar,

Karşılaşılması zor nadir görünecek bir hatanın çözümünü bloğumda not almak ve paylaşmak istedim.

memory“Memory gates checking failed because the free memory (717426688 bytes) is less than 5% of total memory.  As a result, the service will not be available for incoming requests.  To resolve this, either reduce the load on the machine or adjust the value of minFreeMemoryPercentageToActivateService on the serviceHostingEnvironment config element.”

Yukarıdaki hata ile karşılaştıysanız sunucunuz üzerinde ciddi bir yük var demektir. Memory (RAM) %95′in üzerinde bir kullanıma ulaştığı takdirde bu hata ile karşılaşacaksınız. Servisin çalışması için boş olan minimum memory yüzdesini config dosyasında ayarlamamız gerekmektedir. Aşağıdaki ayar yapıldığında sorun ortadan geçici olarak kaldırılmış olacaktır. Fakat ileride sunucumuz ile ilgili ciddi yük sorunu yaşanacağını göz önüne almamız gerekmektedir. Bir diğer ve kalıcı çözüm sunucu optimizasyonu yapmak veya ram eklemek olacaktır.

<serviceHostingEnvironment minFreeMemoryPercentageToActivateService=”0″ />

Teşekkürler,

İyi çalışmalar.

Merhabalar,

Aspect oriented programming yazılarımın ikincisine uzun bir aradan sonra tekrardan dönüyorum. Birinci yazımda aspect oriented programming ile ilgili temel bir açıklama yapılmıştır.

Bu yazımda castle windsor kütüphanesi kullanarak bir interceptor oluşturacağız. Oluşturduğumuz interceptor’da loglama işlemini yapacağız. Interceptor’ımızı da istediğimiz sınıflar için IoC tanımlamalarında interceptor olarak belirtir ve interceptor’ımızı bu sınıflar için aktif hale getirebiliriz. Peki bazı methodlarda loglama interceptor’ının aktif olmasını bazı methodlarda pasif olmasını nasıl sağlayabiliriz gibi güzel bir soru üzerine attribute oluşturma ve attribute’lere göre interceptor üzerinde işlemler yapmak çok daha efektif olacaktır cevabı gelmektedir.Continue reading

Merhabalar,

Bu yazımda Dependency Injection pattern (Bağlılığı enjekte etme deseni) konusu ele alacağız.

Dependency Injection pattern bir bağımlılığı olan nesnemize dışarıdan bu bağımlılığa istediğimiz sınıfımızı enjekte etme işlemidir. Bu işlem ile bağımlılıkları tam anlamı ile ortadan kaldırmış oluyoruz.

Dependency inversion principle yazımdaki örnekte bulunan UrunService sınıfımızı ele alacak olur isek constructor’daki IBildirimIslemleri tipinde alınan parametre ile dependency injection gerçekleştirmiş oluyoruz. UrunService sınıfı bildirim işlemi olarak hangi nesneyi kullanması gerektiğini dışarıdan almış oluyor.Continue reading

Merhabalar,

Bu yazımızda daha önce bahsettiğimiz repository pattern’de kullandığımız repository’lerimizi daha da geliştirip generic repository kullanacağız. Generic repository ile repository’lerimiz üzerinden uyguladığımız benzer crud işlemlerini generic repository üzerinde gerçekleştireceğiz. Böylece her repository üzerinde tekrar tekrar yazma zahmetinden kurtulmuş olacağız.

Generic repository içerisinde gerçekleştirilecek işlemleri kendisine generic parametre olarak geçilen tip ile yapmaktadır. Aşağıda sadece basit bir şekilde insert, update, delete ve select işlemleri için bir kaç örnek method geliştireceğiz.Continue reading

Merhabalar,

SOLIDSOLID prensiplerinin sonuncusu olan dependency inversion prensibini önceki solid prensiplerinden çok uzun bir zaman sonra yazıyorum. Öncelikle Dependency inversion prensibini anlamak için sorunun ne olduğuna göz atalım.

Örnek olarak Open Closed prensibinde ele aldığım örnek ile devam edeceğim. Bizim bir e-ticaret sistemimiz olduğunu düşünelim ve sistemimizde ürün silindiğinde bilgi olarak mail gönderiliyor.Continue reading

Merhabalar,

Repository

Bu yazımda repository pattern’i ele alacağız. Öncelikle repository nedir, ne için kullanmalıyız sorusuna yanıt vermek gerekir ise repository’yi veri tabanı işlemlerinin sorumluluğunu üstlenen bir katman olarak tanımlayabiliriz.  Tüm crud işlemlerinin yapıldığı katman olarak göz önüne almalıyız. Ne için kullanmalıyım neden böyle bir katmana ihtiyaç vardır ki soruları ile karşılaşılmaktadır, verilecek en basit yanıt olarak yazılım dünyasının önemli kurallarından olan kendini tekrar etme kuralı gösterilebilir. Aynı veri tabanı işlemlerini birden fazla yerde tekrar tekrar yazma zahmetinden kurtulmuş ve istediğimiz yerde basit bir şekilde kullanmış oluyoruz. Repository’leri geliştirilirken fark edeceğiniz gibi kendini tekrar etme işleminden tam anlamda kurtulmuş olmuyoruz. Neden mi? Basit bir insert işleminde aynı satırları sadece farklı sınıflar için tekrar tekrar yazdığımız da farkına varıyoruz ve bundan kurtulmanın yollarını arıyoruz. Bu arayış generic repository yapısını karşımıza çıkarıyor ve bir zahmetli işten daha kurtulmuş oluyoruz. Generic repository ile farklı sınıflarımızın aynı işlemlerini tek bir sınıf üzerinden yapılmasını sağlamış oluyoruz. Fakat bu yazımda generic repository yapısını ele almayacağız.Continue reading

Merhabalar,

Log4NetLoglama işlemlerinin sistemler üzerindeki önemi ciddi anlamda yüksektir. Loglama işlemlerini kendi yazdığımız basit log sınıfları ile de yapabiliriz fakat genel olarak kabul gören kütüphanelere karşı çok daha basit kalacaktır. Loglama kütüphanelerinden Log4net ve Nlog en önemlilerinden iki tanesidir. Bu kütüphanelerle log seviyesine göre loglama işleminde de farklı farklı davranmasını ayarlayabiliriz. Hata aldığında logla ve mail at, Bilgi loglarında ise sadece loglama işlemi yap gibi ayarlamalar yapabiliriz. Bu loglama sistemleri log yazma ortamı olarak hali hazır şekilde bir çok ortam sunmaktadırlar. Xml, console, text, smtp, ado.net(veritabanı) gibi bir çok seçenek sunulmuştur. Bize sadece istediğimiz konfigürasyonu yapmak kalmıştır.

Continue reading

Merhabalar,

Fluent nhibernate ile crud işlemleri yapılmasını ele alacağız ve daha önceki fluent nhibernate ayarlanması ve kullanılması yazısındaki örnek üzerinden devam edeceğiz.  Fluent nhibernate ayarlandıktan sonra session nesnemizin üzerinden tüm crud işlemlerimizi kolay bir şekilde yapabiliriz. Geliştireceğimiz örnekte insert, update, delete, select sorgularının tek tek birer method ile gerçekleştireceğiz.Continue reading

Merhabalar,

ORM kütüphanelerinden olan fluent nhibernate kütüphanesinden bahsedeceğim. Fluent nhibernate (CRUD) veri erişim işlemlerini kolaylıkla yapabilmemizi sağlamaktadır. Diğer ORM kütüphanelerinden yapılan bazı test sonuçları göz önüne alınarak daha hızlı olduğu kabul edilmektedir. Micro ORM kütüphaneleri ile ORM kütüphaneleri arasındaki hız testlerinde tabiki micro ORM kütüphaneleri daha hızlı sonuçlar vermektedir. Ama tabiki seçilecek kütüphane sadece hız olarak bakılmamaktadır. Proje bazlı olarak hangi kütüphanenin daha fazla yarar sağladığına göre karar verilecektir.

İlk olarak projemize Fluent nhibernate’i nasıl ekleyebiliriz, mapping ve select işlemlerini nasıl yapabiliriz konusuna değineceğim. Fluent nhibernate ile veri tabanı ilişkisini sağladığımız bölümde, veri tabanında bizim için tabloların oluşturulmasını sağlayabiliriz. Bu işlem ile code first olarak veri tabanına bizim belirlediğimiz modeller ve mappingler ile tabloların oluşmasını sağlamış oluruz.

Geliştireceğim örnekte Console application üzerinden ilerleyeceğim. Uygulamamıza fluent nhibernate kütüphanesini dahil edeceğiz. Bunun için projemize sağ tıklayıp manage nuget package seçeneğini seçerek arama bölümünde fluentnhibernate yazarak çıkan sonuçlardan orm’i projemize dahil edebiliriz. Aynı zamanda Package Manager Console panelinden “Install-Package FluentNHibernate” yazarak da projemize dahil edebiliriz. Ben package manager console üzerinden projeye dahil ediyorum.Continue reading

Merhabalar,

Wcf ile servis oluşturduğumuzda servisimizin geriye döneceği veya alacağı çıktıları oluşturması için oluşturduğumuz class’larda DataContract ve DataMember attribute’lerinden faydalanırız. DataContract sınıfımızın servisimiz tarafından kullanılabilir olduğunu belirtmektedir, DataMember ise class’ımız içerisindeki attribute’lerin servisimiz tarafından serialize edileceğini belirtmektedir. DataMember attribute’nde bazı özellikler sayesinde nasıl serialize edilmesi gerektiğini ve nasıl bir sözleşme olması gerektiğini belirleyebiliriz.Continue reading