RSS
 

Archive for the ‘Projelerim’ Category

C# Windows servisleri

22 Nis

C# Windows servisleri

Öncelikle servis nedir  ondan bahsedelim.  Bildiğimiz gibi servsiler genel de bilgisyar açıldığında  arka planda devreye giren ve işlemler yapan programlardır bilgisayarımızda çalışan hizmetleri “Yönetimsel araçlardan görebiliriz” Örneğin sql server ın ajan servisini sürekli kullanmayacaksanız bunu “Hizmeti durdur” diyerek bu hizmet i gerçekleştrimek için kullanılan ram i başka işlemlerde kullanarak performansınızı arttırabilirsiniz.

Şimdi c# kullanarak kendi servisimizi yapıp aynı sql server ajanı tarzı bir servis geliştirelim  ben kısaca programın nasıl çalışmasını istediğimi anlatayım öncelikle bir store procedure ümüz olacak ve store procedure benim istediğim veritabanın yedeğini alacak tabi bu işlemi de c# ta benim yaptığım servisleri kullanarak yapacak. Peki nasıl yapabiliriz öncelike

New project diyerek “windows service” ekliyoruz. Bize  Service1 adında bir class oluşturuyor bunu sınıf içerisinde bir windows servisinde kullanılan temel metodlar “OnStart()” servis başlatıldığında ne olması gerektiği “OnStop() “ servis kapatıldığında yapılacak işlem vb. Bunlara ek olarak bizde override ederek  OnPause() OnContinue() gibi override edilebilir metodları ekleyebiliriz . Bunlara ek olarak diyelim ki bizim servisimiz parametre ile çalışacak olsun böyle bir durumda OnCustomCommand() metodunu overrice ederek kullanabilirsiniz kısaca örnek vereyim aşağıdaki kod parçası biz servisi çalıştırıken gönderdiğimiz parametre 1 olduğu zaman c dizinine dosya.txt yi oluşturuyor.

protected override void OnCustomCommand(int command)

{

switch (command)

{

case 1:

StreamWriter str = new StreamWriter("c:\\dosya.txt");

str.Write("1");

str.Close();

break;

}

}

Bu metodu kullanarak bizim yapacağımız uygulamada kullanıcıdan connection string i isteyerek o veritabanın yedeğini alabiliriz J

Şimdi programımıza geçelim öncelikle store procedure ümüzü oluşturuyoruz.

CREATE PROCEDURE yedeklerim AS

BACKUP DATABASE yeni

TO DISK='d:\yeni.bak'

WITH FORMAT,

MEDIANAME = 'yeniveritabanı0',

MEDIADESCRIPTION = 'Striped media set for yeni veritabanı ';

Yedeğini alacağımız veritabanı adını ve nereye yedeğini almak istediğimizi giriyoruz ve kaydediyoruz.

Şimdi servisimizin kodlarını açıp bu store procedure u programdan çağıralım  Servisimizin Onstart olayına aşağıdaki kodları yazıyoruz.

protected override void OnStart(string[] args)

{

SqlConnectionStringBuilder ayar = new SqlConnectionStringBuilder();

ayar.DataSource = "YUHUBAA\\SQLEXPRESS";

ayar.InitialCatalog = "master";

ayar.IntegratedSecurity = true;

SqlConnection con = new SqlConnection(ayar.ConnectionString);

con.Open();

SqlCommand komut = new SqlCommand("yedeklerim", con);

komut.ExecuteNonQuery();

}

Artık servisimizi oluşturduk sıra geldi servisimizi windows hizmetlerine yüklemeye. Bu işlem için servisimizin design kısmında sağ tıklayıp “Add Installer” diyrouz ve bize “serviceProcessInstaller1” ve “serviceInstaller1” kontrollerini oluşturuyor. Burda bizim için önemli olan processinstaller kontrolü bu kontrolün properties kısmından Account özelliğini seçiyoruz biz “NetworkService” yapıyoruz. Servisimizi kaydedip derliyoruz ve bir exe oluşturuyor. Şimdi bu exe yi servislerimize yükleyelim Visual Studio tool tan visual studio 2008 command prompt u açıyoruz (aynı işlemi cmd ile de gerçekleştirebilirsizin)

Prompt u açıp “installutil ” yazıp yanına servisimizin exe sinin adresini verip yuklüyoruz. Artık servisimiz windows hizmetlerinin içerisinde yer alıyor biz bu servisi start ettiğimizde veritabanın yedeğini almış oluyoruz.

Aşağıda bizim servisimizin yuklendiğini görüyoruz.

(not: servisi uninstall yapmak için installutilden sonra –u dememiz gerekiyor).

Şimdi yaptığımız servisi c# projemizde nasıl kullanacağız ?

Yeni bir windows form açıyoruz ve toolbox tan “serviceController1” ekliyoruz ve properties kısmında yer alan ServiceName kısmından kendi oluşturduğumuz servisi yada kullanmak istediğimiz servisi esçiyoruz.

(aynı işlemi server explorer kısmından sol tarafta gördüğümüz servislerden kullanmak istediğimizi sürükleyip kullanabiliriz.)

Artık aşağıdaki gibi kodları kullanabiliriz.

serviceController1.Start();

serviceController1.Pause();

serviceController1.Continue();

serviceController1.ExecuteCommand(1);
 
1 Comment

Posted in C#, Makaleler

 

Wcf Nedir?

21 Nis

Wcf .net 3.0 ile gelen yeni teknolojilerden biri Wcf aslında bir web servisidir. Web servislernin kullanımı ile ilgili ilk uygulamımızı yapmıştık buradan ulaşabilirsiniz.

Wcf web servislerinin gelişmiş hali diyebiliriz. .net içerisinde yer alan iletişim araçlarını (bunlar soap remoting xml web servisleri vb.) bir çatı altında toplayan yapıdır diyebiliriz.
Peki nerde kullanabiliriz wcf yi ? Thy ele alalım sitesinden bilet satışı ve rezervasyon işlemleri yapılıyor bu işlemleri de thy ye ait serverımızda bulunan veritabanından gerçekleştiriyoruz. İşte bu nokta da wcf devreye giriyor. Wcf de servisimizi hazırlıyoruz ve sitemize koyuyoruz programımızdan da servisi çağırdığımızda yapacağımız işleme göre bize bir sonuç döndürmesini bekliyoruz (Kullanıcı girişi için True yada False olabilir). Şimdi basit bir uygulama yapalım ve Rezervsayon kaydedelim ve rezervasyon iptal işlemini wcf kullanarak yapalım.

Öncelikle
Visual Studio ya hazır template olarak gelen Wcf Service
Library i açıyoruz. Bize Iservice1.cs ve Service.cs sınıf ve interface i otomatik oluşturuyor. Bu sınıfları açıp incelediğimizde azır bir şablon çıkıyor burda önemli olan kısım classımızda hazır işaretlenmiş olan attributelerdir. Biz şimdi bunları siliyoruz metodlarımızın bulunacağı bir interface(Ibilet) üye değişkenlerimizin olacağı bir class metodların olacağı bir class ekliyoruz(Biletservis.cs,bilet.cs)
Şimdi classlarımıza bizim için gereken kodları yazıyoruz.
Baktığımızda web servisleri ile uygulama geliştirirken biz [WebMethod] ile etiketliyorduk Wcf de ise bu durum farklı. Şimdi bunları inceleyelim.

// bilet sınıfımız

[DataContract]

public class bilet

{

//yolcu bilgisini tutacak üye değişken

[DataMember]

public string yolcu;

[DataMember]

//istakameti gireceğimiz üye değişken

public string sehir;

//Seyehat Tarihi

[DataMember]

public DateTime tarih;

}

[DataContract]: Networkten gelecek olan verileri okuyacak olan sınıfımızı bu etiketle imzalıyoruz.

[DataMember]: Class içerisindeki erişmek istediğimiz üye değişkenlerimizi bu attiribute ile etiketliyoruz.

//şimdi interface imizi inceleyelim;

[ServiceContract]
interface IBilet
{
[OperationContract]
void RezervasyonKaydet(bilet b);
[OperationContract]
List Goruntule();
[OperationContract]
void RezervasyonIptal(string id);
}

[ServiceContract]: Aynı classımızdaki mantıkla interfaclerimizi de bu attributle etiketliyoruz.
[OperationContract]: İnterface de yer alan tanım bloklarınıda operation contract ile etiketliyoruz.
//şimdi biletservis.cs imizi oluşturalım

public class biletservis:IBilet //Ibilet interface imizi implement ediyoruz.
{
List rezervasyonlar = new List();//rezervasyonlarımızı tutacağımız listemiz
#region IBilet Members
public void RezervasyonKaydet(bilet b)
{
Random r=new Random();
b.id = r.Next(0, 100);//rezervasyona rastgele bir sayı veriyoruz.
rezervasyonlar.Add(b);
}
public List Goruntule()
{
return rezervasyonlar; //bilet nesnesinden bir liste döndürüyoruz.
}
public void RezervasyonIptal(string id)
{
//lambda ifadesi ile parametre olarak gelen id yi liste içerisndeki id ler ile karşılaştırıyor.
rezervasyonlar.Remove(rezervasyonlar.Find(e => e.id == id));
}
#endregion

Yukle.TC - Resimlerinizi İnternete Yükleyin

Şu anda servisimiz hazır servisimizi test edelim bu işlemi ” Wcf Test Client ” ile similasyon şeklinde yapabiliriz. Solution dan appconfig dosyasına sağ tıklayıp “Edit Wcf configuration” diyerek simülasyonumuzu çalıştırıyoruz.

Burada dikkat etmemiz gereken bir husus var projeyi açtığımızda servis1 olarak oluşturduğu için bunu bin dosyamızdaki dll imizle servisimizin adını değiştiriyoruz. Aynı işlemi Endpoints altındaki empty name alanında da yapıyoruz.file menüsünden save diyerek kaydediyoruz.

şimdi projemizi çalıştırıyoruz.

* Id kısmı otomatik verildi sehir tarih ve yolcu bilgilerini invoke deyip kaydediyoruz. value değeri null döndürüse sorun yok demektir.

* Görüntüleye tıklayalım şimdi

Gördüğümüz gibi bütün rezervasyon bilgileri görüntülendi.

şimdi bir rezervasyonu iptal edelim

Bu işlem sonunda id si 31 olan rezervasyonu silmiş olduk …

Örnek uygulamayı indir

 
No Comments

Posted in C#, Makaleler

 

C# ta User Control Kullanımı

13 Nis


C# Ta user kontrol kullanımı

User kontroller nelerdir öncelikle biraz bundan bahsedelim bildiğimiz gibi c# ta bütün nesneler bizim toolboxtan eklediğimiz buton label textbox… gibi kontrollerin hepsi aslında “control” sınıfını baz alarak oluşturulurlar kontorl sınıfında ortak işlevler mesaj fonksiyonları ortak eventlar bulunur. Bunu designer kısmına geçip kontrolümüzün Metadatasına bakarak aslında control sınıfından türetilerek oluşturulduğunu görürüz.
public abstract class ButtonBase : Control

Peki user controller ne işe yarar? Örneğin projenizde  bir textboxımız var ve bu textboxa girilen değerler için validation işlemleri gerçekleştirmek istiyoruz bu işlemi yapabilmek için user kontrolleri kullanarak elimizdeki textboxa bu yetenekleri ekleyip yeni bir kontrol oluşturuyoruz (eğer kullanıcı geçersiz mail girerse uyaracak gibi..)

Bana göre User controllerin faydasını farklı bilgisayarlarda uygulama geliştiren programcılar için bulunmaz nimet J. Şöyle ki siz label kontorolünü kullanarak bir saat kontrolü yaptınız bu dll i referans olarak projesine ekleyen herkes bu saat kontrolünü problemsiz kullanabilir.

Şimdi bizde labelları kullanarak kendimize bir saat kontrolü yapalım;

1-Öncelikle NewProject diyerek yeni bir WindowsFormsControlLibrary ekliyoruz bize boş bir panel oluşturuyor buraya 3 adet label ve 3 tane de timer ekliyoruz.(S=Saat D=Dakika S=Saniye)

Saatimizin çalışma mantığı şu olacak: Programın çalıştığında o andaki saati alacak timer ile saniyeyi arttıracak 60 a geldiğinde o andaki dakikayı alıp label 2 ve dakika da 60 olduğunda saatimizi bir attrıcak.

Bu işlem için timer kontollerimizin Enabled özelliğini True ve Intervallerini 1000(1 sn) olarak ayarlıyoruz. Kod kısmına geçiyoruz;

//Saniye ve dakika bilgilerini tutacağımız global değişkenler
int i = 0;

int y = 0;

int z = 0;

private void UserControl1_Load(object sender, EventArgs e)

{

//Program ilk çalıştığında o anki saat bilgisini alıyoruz.

label1.Text = DateTime.Now.Second.ToString();

label2.Text = DateTime.Now.Minute.ToString()+":";

label3.Text = DateTime.Now.Hour.ToString()+":";

}

private void timer1_Tick(object sender, EventArgs e)

{

//saniye bilgimizi timer ile yeniliyoruz.

label1.Text = DateTime.Now.Second.ToString();

y = Convert.ToInt32( DateTime.Now.Second);

}

private void timer2_Tick(object sender, EventArgs e)

{

y++;

//saniye 60 ise label 2 yi o anki dakika ile guncelle

if (y % 60 == 0)

{
//Z değişkenine dakika değerini atıyoruz saat kısmında kullanacağız.

z = Convert.ToInt32(DateTime.Now.Minute);

label2.Text =+":"+DateTime.Now.Minute.ToString()+":";

}

}

private void timer3_Tick(object sender, EventArgs e)

{
//Dakika 60 ise o anki saat bilgisini al

if (z % 60 == 0)

{

label3.Text = DateTime.Now.Hour.ToString();

}

}

Bu kodları “Build” menüsünde derlediğimizde bize bir ader dll oluşturuyor. Şimdi  yeni bir form uygulaması açalım toolbaxa gelelim

(not= bu arada şunu da söylemek istiyorum ekledğimiz kontrolleri toolbaxa ayrı bir tab olarak Add Tab diyerek ekleyebiliriz. ) Toolbax ta sağ tıklayıp choose items diyerek oluşruduğumuz dll i gösteriyoruz ve toolbaxa  bizim saat kontolümüzü ekliyor şimdi bunu forma sürükleyip bıraktığımızda hiç bir işlem yapmadan saat nesnemizi kullanbileceğiz. Kontolümüzün çalışır hali.


 
1 Comment

Posted in C#, Makaleler