C# ile AppFabric Cache Yönetimi

Daha önceki makalelerimde sizlere PowerShell üzerinden AppFabric Cache’i nasıl yönetebileceğinizi anlatmış, örnek bir AppFabric Cache PowerShell script’i paylaşmıştım. Bu makalemde sizlere C# üzerinden nasıl PowerShell’e ulaşabileceğinizi ve nasıl AppFabric Cache yönetim komutlarını kullanabileceğinizi anlatacağım.

C# üzerinden PowerShell komutları çalıştırabilmek için öncelikle System.Management.Automation kütüphanesine referans vermeniz gerekli. Bu kütüphaneyi aşağıdaki klasör altında bulabilirsiniz;

C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 (x32)
C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 (x64)

Eğer bilgisayarınızda bu klasörü bulamıyorsanız PowerShell 2.0 SDK’sını kurmalısınız.

Referansını ekledikten sonra AppFabric Cache komutlarını çalıştırabileceğimiz bir PowerShell çalışma alanı oluşturmalıyız. Aşağıda bir PowerShell çalışma alanı oluşturma kodunu bulabilirsiniz;

var initialSessionState = InitialSessionState.CreateDefault();
initialSessionState.ThrowOnRunspaceOpenError = true;

var cacheRunspace = RunspaceFactory.CreateRunspace(initialSessionState);

cacheRunspace.Open();

Not: Yukarıdaki kodun derlenebilmesi için System.Management.Automation.Runspaces isim uzayı için using eklemelisiniz.

Bu kod ile oluşturduğunuz çalışma alını üzerinden bir pipeline oluşturarak bu pipeline içerisinde PowerShell komutlarını çalıştırabilirsiniz;

var pipe = cacheRunspace.CreatePipeline();
pipe.Commands.Add("[bir PowerShell komutu]");

var sonuc = pipe.Invoke();

PipeLine içerisine vereceğiniz PowerShell komutu yeni bir cache oluşturma olabileceği gibi (New-Cache), Önbellek kümesini yeniden başlatmakta olabilir (Restart-CacheCluster).

Konu hakkında daha fazla ilerlemeden önce, aynı PowerShell komut satırından yaptığımız gibi ihtiyacımız olan AppFabric Cache PowerShell modüllerini yüklememiz gerektiğini de belirtmeliyim. Aksi halde, yazacağımız komutlar PowerShell tarafından tanınmayacağı için hata mesajı alacağız. PowerShell modüllerini AppFabric çalışma alanına eklemenin en kolay yolu bu çalışma alanı eklenmeden hemen önce hazırladığımız SessionState içerisine ImportPSModule fonksiyonunu kullanarak yüklemek;

initialSessionState.ImportPSModule(new[] { "DistributedCacheAdministration", "DistributedCacheConfiguration" });

Her ne kadar yukarıdaki örnekte her iki AppFabric Cache modülü yüklenmiş de olsa; iş mantığınız gereği kullanacağınız AppFabric Cache komutları bunlarda sadece birine ihtiyaç duyabilir. Bu durumda sadece gerekli olan modülü yüklemeniz ihtiyacınızı karşılayacaktır.

Eğer AppFabric Cache Yönetimi ile ilgili bir/birkaç komut çalıştırmayı planlıyorsanız aynı PowerShell komut satırında olduğu gibi ilk çalıştırmanız gereken komut “Use-CacheCluster” olmalı. Eğer kodun çalıştığı bilgisayar bir önbellek kümesine dahil değilse ya da farklı bir önbellek kümesi için komut çalıştırmak istiyorsanız bu durumda “Use-CacheCluster” komutuyla birlikte bu önbellek kümesinin bağlantı bilgilerini de vermeniz gereklidir.

Oluşturduğumuz pipeline içerine birden fazla komut eklememiz durumda bu komutlar PowerShell içerisinde eklenme sırasına göre işletilecektir.

C# içerisinde AppFabric Cache PowerShell komutlarını çalıştırmaya en güzel örnek bir cache’in istemcilerce kullanılmaya başlanması öncesinde hazırlanması olacaktır. Bu durumda yeni cache-oluşturulması sonrası cache’in doldurulması gereklidir;

var newCacheKomutu = new Command("New-Cache");
newCacheKomutu.Parameters.Add("CacheName", "test");
pipe.Commands.Add(newCacheKomutu);

Yukarıdaki örnekte New-Cache komutu sadece zorunlu olan CacheName parametresi verilerek çağırılmıştır. Komutun işletilmesi sonucunda küme içerisinde test adıyla yeni bir önbellek oluşturulacaktır. Bu basit örnekten yola çıkarak sizde C# üzerinden kendi önbelleklerinizi oluşturabilirsiniz. New-Cache komutuna verebileceğiniz parametreleri ise PowerShell oturumda “get-help New-Cache” komutuyla göreceğiniz yardım ekranında bulabilirsiniz. Bu komut hakkında daha detaylı yardım almak için “get-help New-Cache –full” komutunu da kullanabilirsiniz.

Şimdiye kadar anlattıklarımı bir araya topladığımızda karşımıza aşağıdaki kod parçacığı çıkacaktır;

var initialSessionState = InitialSessionState.CreateDefault();
initialSessionState.ImportPSModule(new[] { "DistributedCacheAdministration" });
initialSessionState.ThrowOnRunspaceOpenError = true;

var cacheRunspace = RunspaceFactory.CreateRunspace(initialSessionState);

cacheRunspace.Open();

var pipe = cacheRunspace.CreatePipeline();

pipe.Commands.Add("Use-CacheCluster");

var newCacheKomutu = new Command("New-Cache");
newCacheKomutu.Parameters.Add("CacheName", "test");
pipe.Commands.Add(newCacheKomutu);

var sonuc = pipe.Invoke();

PowerShell içerisinden kullanabileceğiniz komutları aşağıdaki komut vasıtasıyla listeleyebilirsiniz;

Get-Command -module DistributedCacheAdministration

CommandList-DistributedCacheAdministration

Güncelleme [9 Mayıs 2010] : Yukarıdaki kodun çalışması sırasında DistributedCacheAdministration modülünün bulunamadığına dair hata alıyorsanız bu makaleden yardım alabilirsiniz.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir