Azure Cloud Service Worker Role ile Sql Db’den Kurlara Göre TL Karşılığını Bulma Part1

Selamlar;

Bugün bir şirketin farklı kurlardaki sql db kayıtlarına, belirli bir zaman aralığında bakarak o an ki güncel kur ile TL karşılığını bulacağız. Bunun için Azure tarafındaki Cloud Service çözümüne gideceğiz.

1-)Öncelikle Visual Studio 2015 Preview’de aşağıda görüldüğü gibi Azure Cloud Service uygulaması yaratılır.

CloudeServices

2-)Bu cloud service için Worker Role seçilir.

WorkerRole

3-)Solution’ın  son hali aşağıda görüldüğü gibidir.

solution

Şimdi gelin BorsoftCompany adında bir database oluşturalım. Yaratılan tablolar aşağıdadır.

[dbo].[ExportProductDetail]                                   [dbo].[ExchangeType]

Table  type

Yukarıda [dbo].[ExportProductDetail].ExchangeType ile  [dbo].[ExchangeType].ID arasında Foreign Key vardır.

relation

Solution’a yeni bir DAL adında Class Library ekleyelim.

dal

Şimdi yeni DAL projemize Entity Data Model ekleyelim.

edm

Var olan database den Code First ile DbContext yani Data Model’i oluşturalım.

codeFirst

İlgili database ve tablo aşağıdaki gibi seçilir:

con1  exportFirst

Oluşan Data Model ExportProductDetail.cs: Ayrıca DbContext de ProductContext adında aşağıda görüldüğü gibi oluşturulur.

DAL projesindeki connection string WorkerRole1 projesindeki app.config dosyasına aşağıdaki gibi kopyalanır.

Kurlar için aşağıdaki gibi Enum class yaratılır. Böylece gelen kur tipine göre işlem yapılır.

Şimdi sıra geldi ilgili database’i her 30sn bir kontrol edip ExchangeRate’i yani kur değeri olmayan kayıtları çekip, kur tipinin enum karşılığına göre TL fiyatını bulmaya. İlgili kod aşağıdadır. Linq ile products.ExchangeRate ==null olan kayıtlar çekildikten sonra eğer kayıt var ise Xpath kullanılarak  [@Kod=’USD’]  gibi ilgili kur değerleri tcmb.gov.tr‘den alınmıştır. Daha sonra fiyat ile kur Switch Case yapısı kullanılarak girilen kur tipinini enum karşılığına göre çarpılır. Böylece ürünün TL fiyatı bulunur.

Servis çalışmadan önceki ve sonraki örnek kayıdın durumu aşağıdadır. Böylece windows service yerine Azure üzerinde asenkron çalışan cloud bir service ile ilgili dataların fiyatının TL karşılığını bulduk.

Kurlar

WokerRole1:cs (Tüm Kod): WorkerRole ilk çalıştırıldığı zaman OnStart methodu devreye girer ve Trace’e mesaj yazılır. Daha sonra Run() methodu çalıştırılır ve RunAsync() methodu asenkron olarak çağrılır. Daha sonra bu asenkron method kendini her 30snde bir çağırır. Ve yeni kayıt olup olmadığı kontrol edilir.

2.Bölümde AngularJs javascript framework’ü kullanılan bir ekranda yeni ürün girişi yapıcağız. Ve girilen tüm ürünleri aşağısında sıralayacağız. Daha sonra Azure Cloud Services devreye girip ürünün TL karşılığını bulunca signalR ile aşağıda listelediğimiz bu ürünü yenileyeceğiz.

Kodları 2.Bölümün sonunda alabilirsiniz.

Makalenin devamında görüşmek üzere hoşçakalın.

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

4 Cevaplar

  1. Kema dedi ki:

    Merhaba Hocam,
    await Task.Delay(30000);
    bölümünde gösterdiğim sürenin iki katını bekliyor, yani 10 saniye dediysem, 20 saniyede bir yapıyor. Neden olabilir?

    • borsoft dedi ki:

      Selam Kemal,

      Sanırım O bölüme 2 kere giriyor. Yani uygulama da RunAsync 2 kere çalıştırılıyor olabilir. Ya da farklı yerlerde yanlışlıkla 2 tane “Task.Delay(30000)” yazmış olabilirmisin ?
      Bunları bir kontrol et derim.

      İyi çalışmalar.

  2. Hakan Tur dedi ki:

    Hocam sadece bir değil birçok sorunuma ayna tuttunuz. Sayenizde
    Azure CloudKit server nasıl bağlanacağımı
    Nasıl Worker Role oluşturacağımı
    Class Library kullanımını
    Code first ile nasıl ilişkilendirme yapılacağını
    Asenkron yaklaşımın nasıl kullanılacağını
    Using kullanımını
    Parse kullanımını
    Taskın tekrarlayan işlemleri gerçekleştirebileceğini

    Benim için altın değerinde olan ufak bir kod dizisiyle göstermişsiniz.
    Aslında siz bir yazılım geliştiricinin nasıl temiz çalışması gerektiğini ifade etmişsiniz. Teşekkür ediyorum.

    • borsoft dedi ki:

      Selamlar Hakan,
      İşine bu denli yaraması, beni çok sevindirdim. Bu tarz güzel yorumlar ile daha bir şevkli yazıyorum :) Teşekkürler.

      Hoşçakal..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.