Yeni bir WebServis projesi oluşturalım. Visual Studio içinde File->New Project diyelim

Servisimizi isimde verelim Servise sağ tıklayıp Name ve ServiceName kısımlarına isim verelim ben AltinServisimiz dedim

Merhabalar,
Bu makalemde windows servislerine giriş niteliğinde bir makale yazacağım. Makale konusu olarakta değişik bir konu seçeceğim. Windows servisleri ile xml olarak gelen borsa,döviz ve altın bilgilerini belirli aralıklarla veritabanına kaydeden bir yazılım yapacağız. Siz bilgisayar kullanımınıza devam ederken servis arka planda çalışacak ve verileri okuyup veritabanına kaydedecek ruhunuz bile duymayacak :)
Yeni bir proje açmak için visual studio da file ->new -> project diyerek Windows sekmesinden windows service seçeneğini seçiyoruz. İsim olarakta AltınServis yazıyoruz. Servisimiz oluştuktan sonra view code dediğimizde iki tane metod karşılıyor olacak bizi, bunlar.
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
OnStart metodu servis başladığında çalışacak metodumuz OnStop metodu ise servis durdurulduğu anda çalışan metodumuz olacak. Biz şimdilik OnStart metdona kodumuzu yazacağız. Ayrıca Timer ekleyerek 1 er dakika aralıklarla çalıştıracağız. Bu arada veritabanımızıda tasarlayalım alış satış fiyatları ve tarih verilerini tutmamız şimdilik yeterli olacak.
Tablomuz

Yeni bir linqtosql classes ekliyoruz ve ismini Altin yapıyoruz

ve tablolarımızı map ettik

XML verilerimizide "http://xml.altinkaynak.com.tr/altin.xml" adresinden çekeceğiz
private System.Threading.Timer _serviceTimer;
protected override void OnStart(string[] args)
{
//dakikada bir çalışacak metodumuzu çağırıyoruz
TimerCallback timerDelegate = new TimerCallback(DoWork);
//60000 değeri ile 1 dk ara ile çalışmasını sağlıyoruz
_serviceTimer =new System.Threading.Timer(timerDelegate, null, 60000, 60000);
}
private void DoWork(object state)
{
XmlTextReader xmlDocument = new XmlTextReader("http://xml.altinkaynak.com.tr/altin.xml");
try
{
DataSet ds = new DataSet();
ds.ReadXml(xmlDocument);
foreach (DataRow r in ds.Tables[0].Rows)
{
foreach (DataColumn c in ds.Tables[0].Columns)
{
using (AltinDataContext altin = new AltinDataContext())
{
if (r[c].ToString() == "GA")
{
tbl_altin alt = new tbl_altin();
alt.alis = Convert.ToDecimal(String.Format("{0:C}", r["ALIS"].ToString()));
alt.satis = Convert.ToDecimal(String.Format("{0:C}", r["SATIS"].ToString()));
alt.tam_tarih = DateTime.Now;
altin.tbl_altins.InsertOnSubmit(alt);
altin.SubmitChanges();
}
}
}
}
}
catch (Exception ex)
{
//Hata olduğunda hatayı hata.txt adında bir dosya oluşturarak diske yazıyoruz.
StreamWriter yaz;
yaz = File.AppendText(@"C:\hata.txt");
yaz.WriteLine("hata - " + DateTime.Now.ToLongTimeString() + "\n" + ex.Message);
yaz.Close();
}
finally
{
xmlDocument.Close();
}
}
Servis kodlarımızı yazdıktan sonra install etmemiz gerekmektedir bunun için öncelikle servisimize sağ tıklayıp AddInstaller demeliyiz.

Veee projemizi build ediyoruz sonra sıra geldi işin en zevkli kısmına projemizi servislerimiz arasına ekleyip start etmeye.Bunun için çeşitli yöntemler var ancak ben en pratiğini anlatacağım cmd command promt ile register edeceğiz. Başlat menüsünden Programlar -> Visual Studio 2008 in altında Visual Studio Tools içinde Command Promtu seçeceğiz. Console ekran cd komutlarını kullanarak exe nin bulunduğu klasore kadar erişeceğiz.Burada cd komutu ile servisimizin exe olarak çalıştığı kısma gidiceğiz ve InstallUtil.exe komutu yazip exe nin ismini yazacağız. Komut satırımız şu şekilde olacak.
C:\AltinServis\AltinServis\Bin\Debug>InstallUtil.exe AltinServis.exe bu benim dosya yolum
yazıp enter yapıyoruz ve artık servisimiz eklenmiştir. Sonraki adım servisler kısmına gidip start etmek.

Ve bitti şimdi start kısmına geldi. Bilgisayarım a sağ tıklayıp yönet(manage) diyoruz. Hizmetler kısmına geldiğimizde servisimize sağ tıkla başlat diyoruz ve servisimiz başlıyor çalışmaya. Artık her dakika verilerimiz sisteme kaydediliyor.
İşte sonucumuz

Herkese iyi günler dilerim
Kaynak Kodlar
AltinService.rar (54,46 kb)