-- Oracle, Silverlight, WCF

Silverlight ve WCF ile Oracle Veritabanı Uygulaması Geliştirmek

Yazılım çözümlerinde bazen(sık sık) farklı teknolojileri kullanmak gerekebiliyor. Örneğin, veritabanı Oracle olan, ancak web platformunda ASP.NET ve Silverlight tercih edip, yazılım katmanlarını .NET ile geliştiren bir firma görmeniz olağandır. Bu durumda, platformların birbiriyle entegrasyonu ve kullanımı üzerine yoğunlaşmak gerekiyor.

Ben de genel olarak kullandığım veritabanı teknolojisi olan Oracle ile Silverlight teknolojisinin kullanımını basit bir örnekle incelemeye çalıştım.

Uygulamada yapmak istediğim işlem, Oracle 11g’de ki HR şemasında bulunan JOBS isimli tabloya bir veri eklemek olacak. Bu işlem için istemci tarafında Silverlight kullanırken, servis katmanını WCF ile oluşturacağım.

Öncelikle bir Silverlight Application oluşturuyoruz.

vs2

Oluşturduğumuz Silverlight Application projesinde, tek Solution içerisinde iki adet proje olduğunu görüyoruz. Bunlardan ilki, istemci tarafına yüklenip çalışacak olan Silverlight uygulamasıyken, diğeri bu Silverlight uygulamasını sunucu tarafında host edecek olan ASP.NET Web Application projesidir.

Unutmayın, Silverlight ile istemci tarafında çalışmasını istediğiniz herşey(Servis oluşturma haricinde) Silverlight projesinde bulunmalıdır.

Projemizi oluşturduğumuza göre, artık Oracle ile bağlantı yapmamızı sağlayacak bir WCF Service‘i oluşturabiliriz.

SLOracleConnection.Web isimli projeye mouse ile sağ tıklayıp Add -> Add New Item seçeneğiyle açılan pencerede WCF Service‘i seçiyoruz.

vs3

Artık istediğimiz işlemi gerçekleştirmek için gerekli proje ve alt yapıya hazırız. Projenin sağlıklı çalışabilmesi için bir kez Build etmeliyiz. Üst menüden DEBUG -> Build Project  ya da  Klavye’den F6 tuşlarıyla projeyi Build edin.

Benim oluşturduğum projede App_Code içerisinde yer alan IOracleService.cs ve OracleService.cs dosyalarını kullanarak WCF servisimizin hangi işlemler için kullanılacağını belirleyeceğiz.

IOracleService.cs

Bir interface dosyasıdır. İçerisinde WCF için belirli iş akışlarının sözleşmelerini tutar. Bu interface’den miras alan bir dosya bu sözleşme kurallarına uymak ve uygulamak zorundadır.

OracleService.cs

IOracleService.cs interface dosyasından miras alan bir Class dosyasıdır. Bu Class içerisinde veritabanıyla gerçekleştirmek istediğimiz işlemleri yapacağız. Ben bu proje için Kaydet() metodu oluşturdum.

Kaydet() Metodu

Bu metod ile Oracle veritabanındaki JOBS tablosuna yeni bir JOB ekleyeceğim.

vs5

Dikkat ederseniz INSERT işleminde Identity sütun için bir Sequence kullandım. Aslında bu Sequence Oracle kurulumu ile birlikte oluşmamaktadır. Ben bunu ayrıyeten oluşturarak projemde kullanmayı tercih ettim.

Bu Sequence’in oluşturmak için;

CREATE SEQUENCE  "HR"."JOB_SEQ"  MINVALUE 1 MAXVALUE 11111 INCREMENT BY 1 START WITH 22 CACHE 5 NOORDER  CYCLE;

Oracle SQL Developer ile bu Sequence’i görüntülemek için;

seq

Artık veri eklemek için servis işlemlerimizi tamamladık. Projemizi F6 ile Build ettikten sonra bu servisi kullanarak Silverlight ile gerekli veri ekleme sayfası tasarımı ve servis kullanımını gerçekleştirelim.

Silverlight projemize GorevEkle.xaml adında yeni bir Silverlight User Control ekliyoruz.

– Silverlight projemize sağ tıklayalım.
Add -> New Item seçenekleriyle açılan pencerede Silverlight User Control template’ini seçelim ve adını GorevEkle olarak değiştirdikten sonra projemize ekleyelim.

GorevEkle.xaml sayfamızın tasarımı aşağıdaki gibidir.

sl1

C# katmanında kullanacağımız Button ve TextBox isimlendirmesi için ise XAML kodlarına bakınız;

<TextBox x:Name="txtGorevAd" Grid.Column="1" HorizontalAlignment="Left" Height="31" Margin="10,10,0,0" Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Top" Width="250"/>
<Button x:Name="btnKaydet" Content="Kaydet" Grid.Column="1" HorizontalAlignment="Left" Margin="139,6,0,0" Grid.Row="2" VerticalAlignment="Top" Width="121" Height="36"/>

Servis işlemleri için gerekli tüm hazırlıklarımızı tamamladık. Projemizi F6 ile Build ettikten sonra servis işlemlerine başlayabiliriz.

ASP.NET tarafında host ettiğimiz WCF servisi Silverlight projesinde kullanabilmek için öncelikle referans olarak eklemeliyiz. Bunun için;

– Silverlight projesinin Service References sekmesine sağ tıklayın ve açılan menüde Add Service Reference‘i seçin.
– Açılan pencerede Discover butonuna tıklayarak aynı Solution içerisindeki servisleri listeleyebilirsiniz. Farklı bir Solution ya da web tarafındaki bir servisi kullanacaksanız Go butonunu kullanmalısınız.

sl2

Bu işlemden sonra projemizi F6 ile Build edip servisin kullanılabilir hale gelmesini sağlıyoruz.

Artık servisimizi GorevEkle.xaml.cs içerisinde kullanabiliriz.

using System.Windows;
using System.Windows.Controls;

namespace SLOracleConnection
{
    public partial class GorevEkle : UserControl
    {
        ServiceReference1.OracleServiceClient proxy = new ServiceReference1.OracleServiceClient();
        public GorevEkle()
        {
            InitializeComponent();

            btnKaydet.Click += btnKaydet_Click;
            proxy.KaydetCompleted += proxy_KaydetCompleted;
        }

        void proxy_KaydetCompleted(object sender, ServiceReference1.KaydetCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                if (e.Result)
                {
                    MessageBox.Show("Kayıt işlemi başarıyla gerçekleşti");
                }
                else
                {
                    MessageBox.Show("Kayıt işlemi başarısız");
                }
            }
        }

        void btnKaydet_Click(object sender, RoutedEventArgs e)
        {
            proxy.KaydetAsync(txtGorevAd.Text);
        }
    }
}

Bu işlemden sonra projeyi F5 ile çalıştırdığınızda size varsayılan sayfa olan boş bir MainPage.xaml sayfası görüntülenecektir. İlk çalıştırılacak sayfayı değiştirmek için projenizdeki App.xaml.cs içerisinde aşağıdaki gibi bir değişiklik yapmalısınız.

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            this.RootVisual = new GorevEkle();   // İlk olarak GorevEkle.xaml'ı çalıştır.
        }

Şimdi, projenizi F5 ile çalıştırdıktan sonra, örnek bir veri girişi yaparak bu kaydı Oracle’daki JOBS tablosunda görebilirsiniz.

Ekran Alıntısı

Not : Bu projede kullanılan OracleClient Deprecated olmuştur. Yani .NET’in sonraki versiyonlarında yürürlükten kaldırılacaktır. Bu nedenle projelerinizde kullanmamanız önerilir. Bunun yerine Oracle’ın .NET için geliştirdiği ODAC.NET komponentini kullanabilirsiniz. Ancak bu makaleyi sade ve anlaşılır tutmak için şu an kullanılabilir olan bu yöntemi tercih ettim.

Adsız

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum