Caner Tosuner

Leave your code better than you found it

Web Service'de Güvenlik | Soap Header

Bu makalede Web Service Nasıl Yazılır ? makalesinde bahsettiğim üzre Web Service'de Soap Header Kimlik Denetimi yani Username Password ile service'i kullanabilme konusundan bahsediyor olacağım.

 

Web Service'in tanımına değinecek olursa M2M iletişimin önünü açmak ve back-end sistemlerde var olan çeşitli database yada enterprise yapıların diğer platformlarla iletişimini güvenli bir şekilde sağlamak için geliştirilmiş yapılardır, Kısacası farklı platformların haberleşmelerini sağlamak için kullanılan teknolojilere verilen isimdir. Web Service Nasıl Yazılır ? makalesinde local'de bulunan Northwind database'ine bağlanarak Employees tablosundaki çalışanların bilgilerini getiren bir .asmx servis geliştirmiştik, hatırlicak olursanız projeyi kendi bilgisayarımızda çalıştırdığımızda aşağıdaki resimlerde olduğu gibi çok rahat bir şekilde metod isimlerine tıklayıp Çağır butonuna bastığımızda servis çalışıp istenilen verileri bize getiriyordu.

 

 Yukarıda da gördüğümüz gibi her şey sorunsuz çalışıyor ancak anormal olan durum service URL'ini bulan herhangi biri gidip aynı service'i kullanarak database'de kayıtlı bulunan verilere erişebilir ve bu durum hiç bir şirket yada service sahibi tarafında istenilen bir durum değildir.Güvenlik durumunda web service'ler için kullanılabilecek çeşitli yöntemler vardır bunlardan ençok tercih edileni kuşkusuz Soap Header'dır. Soap Header kullanarak service tarafında belirleyeceğimiz UserName ve Password ile Client'ın service'e bu UserName ve Password kullanarak girişine izin vereceğiz.

1.Adım | Proje ve Class'ın Oluşturulması

  • Visual Studio'da "Northwind" isminde bir adet ASP.Net Empty Web Application oluşturuyoruz. Sonrasında proje içerisine aşağıda olduğu gibi 1 adet User adında "SoapHeader"'dan kalıtım alan class oluşturuyoruz ve içerisine service'e login esnasında kullanacağımız attributeleri yazıyoruz.

   

 public class User : SoapHeader
    {
        public string Username;
        public string Password;
    }

 

2.Adım | Service Sayfasının ve WebMethod'un Oluşturulması

  • Bu adımda projemize sağ tıklayıp 1 adet "MyService" adında Web Service sayfası ekliyoruz ve içerisine aşağıda olduğu gibi kullanacağımız WebMethod'larını yazıyoruz

 

public User User;  //Oluşturmuş olduğumuz User class'ından 1 adet User tanımlıyoruz
 
[WebMethod]        
[SoapHeader("User")]  //Güvenlik burda devreye giriyor, WebMethod'a SoapHeader içerisinde bulunan User nesnesi ile giriş yapıldığını belirtiyoruz
public string KullanıcıGirisi()
{ 
   //Client tarafında UserName ve Password bilgileri doğru girildiğinde ve girilmediğinde yapılması gerekenleri belirtiyoruz
   if (User.Username == "caner" && User.Password == "tosuner")
      return "Kullanıcı Girişi Başarılı";
   else
      return "Kullanıcı Girişi Başarısız";
 }

 

 

Bütün bu işlemler sonrasında Projemizin Solution bölmümü sağ tarafta olduğu gibidir

 

 

 3.Adım | Client Tarafından Service'e İstekte Bulunulması

  • Solution'a sağ tıklayıp 1 adet "Client" adında ConsoleApplication oluşturuyoruz ve sonrasında solution'da bulunan iki projenin haberleşebilmesi için Client ta bulunan References'a sağ tıklayıp "Add Service Reference" diyoruz ve açılan penceren Discover'a tıklayıp solution'da bulunan Northwind projesini görmesini sağlayıp Service bir isim Verdikten sonra OK butonuna basıyoruz. Client'ta bulunan Program.cs class'ını açıp Main metodunun içerisini aşağıda olduğu gibi dolduruyoruz.

 

Northwind.ServiceReference1 sc = new Northwind.ServiceReference1 ();  //Referans olarak eklediğimiz service'in ismi
Northwind.User user= new Northwind.User ();   //Servis içerisinde bulunan SoapHeader'dan kalıtım almış nesnemizi seçiyoruz.
 
user.Username = "caner";   //Servis tarafında oluşturduğumuz Username ve Password bilgilerini user nesnesinin attributlerine yazıyoruz
user.Password = "tosuner";
 
string result= sc.KullanıcıGirisi(user);  //KullnıcıGirisi WebMethod'una user nesnesini veriyoruz ve return edilen sonucu ekranda yazıdırıyoruz.
Console.WriteLine(result);
 
Console.ReadKey();

 

Projeyi çalıştırdığımızda UserName ve Password bilgilerini doğru yazdığımızdan aşağıda olduğu gibi Kullanıcı Girişi Başarılı mesajını ekranda görmüş olacağız.

Microsoft Student Partner Programına Seçildim.

Microsoft'un öğrenciler için olan "Microsoft Student Partner" programına seçildim Smile

  

       "The Begining Of a Dream.." MSP programını ilk olarak geçen yıl önce bu zamanlar duymuştum ve o zaman tam olarak nedir ne değildir bilmiyordum, kısa bir araştırmanın ardından öğrenciler için kaçınılmaz bir fırsat olduğunu öğrendim ve koyuldum yollara :) Başvuru için neler gerekli ?, nasıl başvuru yapılır ? gibi soruların cevabını bulduktan sonra başvuru tarihini beklemeye koyuldum. Geçen yaz tatilinde Amerika'daydım ve sürekli olarak her hafta yaptığım şey Microsoft Kampüs Türkiye Facebook sayfasına girip başvurular başladı mı başlamadı mı diye kontrol etmekti. Aslında gitmeden önce her şeyi hazırlamıştım *Başvuru formunu doldururken gerekli bilgiler, referans olarak göstereceğim kişi hatta başvurular sırasında istenen tanıtım videosunun metnini bile yazmıştım ve Time Square' de  başvuru videosunu çekmiştim Cool Yani tek gereken şey başvurular açıldığında başvuru yapması kalmıştı.

Gel gelelim yaz sonuna kadar bir türlü başvurulara denk gelemedim ve Eylül ayının sonunda Türkiye'ye döndüm ve dersler başladıktan yaklaşık 2,5 ay sonra bir pazar akşamı misafirliğe gittiğim bir yerde gece saat 23:30 gibi facebook'da gezinirken Microsoft Kampüs Türkiye Facebook sayfasına girdim birde ne göreyim "Yeni Dönem MSP başvuruları için son 24 saat" yazıyordu ve 24 saatin dolmasına tam 30 dkka vardı.Hemen başvuru linkine tıklayıp formda bulunan 10-12 soruyu hızlıca doldurdum ve en çok korktuğum şey video konusunda herhangi bir şey istememeleriydi ve son olarak da başvurumdan üniversitede görevli olan bir hocamızın bilgisi olması şartıydı, hemen alelacele Taner hocaya e-mail atıp konu hakkında bilgilendirdim ve o da hemen cevap verip kendisinin ismini yazabileceğimi söyledi.

Neyse başvuruyu yapmıştım ve yaklaşık 1 ay içerisinde sonuçlar açıklandı ve o dönem yeni bir sisteme gidilerek ilk başvuran öğrencileri programa "Candidate" yani Aday olarak kabul etmişlerdi haliyle bende bir Microsoft Student Partner Candidate seçildim.Sonrasında çeşitli toplantılar ve etkinlikler düzenledik, çeşitli eğitimler Microsoft Office'de şahane etkinlikler ve birde Bilgi Üniv. Santral'de bir gece sabaha kadar Code-Night yapmıştık. Şahane bir duyguydu sabahlara kadar None-Stop coding :) MSP seçilebilmek için birçok şey yapmak gerekliydi, etkinliklere katılmak, uygulama geliştirmek kısacası tam anlamıyla Microsoft'un bizden beklediği "Aktif" olmaktı.Elimden geldiğince bütün etkinlikler eğitimlere katıldım çünkü MSP seçilemediğim taktirde bir daha bu tür ortamlarda bulunma ihtimalim de oldukça az olabilirdi.Neyse ki sonunda MSP başvuruları ile ilgili e-mail geldi ve aynı form'u yeniden doldurup programa başvurmamız istendi ve tabi birde video :/ Yaklaşık 30-40 denemenin sonucunda 2,5 dkkalık bir MSP başvuru videosu çektim ve link'ini Microsoft'a gönderdim.

         Geçen hafta 13 haziran Perşembe günü Mustafa Kasap hocamızdan aldığım mail ile MSP seçilmiştim. Aslında pekte şaşırmamıştım çünkü tam anlamıyla bir Candidate'dim Laughing yani normal şartlar altında seçilmem gerekir diye düşünüyordum ve çok şükür ki öyle de oldu Laughing 

Candidate'lik süresince neler yaptım, bana neler kattı ;

  • Birçok etkinliğe ve eğitime katıldım,
  • Microsoft Ofiste Tunus'tan gelen MSP arkadaşları misafir edip onlarla tanışma fırsatım oldu,
  • Şubat ayı içerisinde Microsoft Türkiye AçıkAkademi'nin düzenlediği Windows Phone Uygulama Geliştirme Yarışmasına katıldım ve 1 adet Nokia Lumia 800 Cep Telefonu kazandım,
  • Ee tabi telefonu aldıktan sonra bi gaza gelmeler oldu ve yaklaşık 2,5 ay içerisinde 15 adet Windows Phone uygulaması geliştirdim ve markete yolladım,
  • Geliştirdiğim uygulamalar sayesinde biraz tanınmış olacam ki şu anda Türkiye'de bulunan çeşitli firmaların IT çalışanlarından e-mailler almaya başladım ve Windows Phone ile ilgili sorularını yanıtladım,
  • Ben Candidate'ken MSP programında bulunan arkadaşların üzerinde çalıştığı bir proje vardı ve bir gece yarısı gelen email'de projede bir kişi eksik olduğu ve gönüllü katılacak bir kişi aradıkları yazıyordu, bende hiç tereddüt etmeden cvp yazdım ve yaklaşık 20-25 kişiyle birlikte bir Microsoft Projesinde görev alma şansım oldu.Proje hakkında pek bilgi veremiyorum çünkü henüz duyurulmuş bir şey değil :)
  • Biz öğrencilerin baş belası Cv'lerimizi doldururken içinde bu tarz şeylerin olması inanın hayatında şimdiye kadar çok sağlam 3 şirkette mülakata girmiş birisi olarak söylüyorum birçok şirket için büyük önem taşıyor ve firmaların dikkatini çekiyor,
  • Geliştirdiğim Windows Phone uygulamaları sayesinde, geçen yıl bu zamanlar "keşke bu şirkette çalışabilsem..." dediğim o şirket başta olmak üzere birkaç üst düzey firmadan iş teklifleri alma şansım oldu ama istenilen değilde istediğim yerde çalışmayı tercih ettiğimden şimdilik o teklifleri askıya aldım,
  • ve daha nicesi...

 

Kısacası MSP olmak ve bu community'nin içerisinde bulunmak harika bir deneyim oldu benim için ve olmaya da devam ediyor..

Web Service Nasıl Yazılır ?

Web Service günümüz teknolojilerinin olmazsa olmazları arasında yer almaktadır. Bunun en büyük nedeni M2M iletişimin önünü açmak ve back-end sistemde var olan çeşitli database yada enterprise yapıların diğer platformlarla iletişimini güvenli bir şekilde sağlamaktır.  

.Net tarafında çeşitli Web Service yazma yolları vardır bunlardan bir tanesi asmx dediğimiz [WebMethod]’ lar kullanılarak yazılan servislerdir. Aşağıda ki örnekte Database’den veri çekilerek nasıl bir asmx servis yazılıp çekilen veri internet ortamında yayınlanır ona değiniyor olacağız.

1.Adım | Projenin Oluşturulması

  • Öncelikle aşağıdaki resimde de olduğu gibi ismi "WebService" olan bir adet Asp.Net Empty Web Application oluşturuyoruz

2.Adım | Projeye Web Service Sayfası Eklenmesi

  • Projeyi oluşturduğumuzda içerisinde default olarak Properties, References ve Web.config sayfalar geliyor. WebMethod yazabilmek için Proje ismine sağ tıklayıp aşağıda ki resimde de olduğu gibi bir adet ismi "WebMethods" olan WebService sayfası ekliyoruz.

  3.Adım | WebMethod 'un Anlaşılması

  • Service sayfasını ekledikten sonra kodlarını açtığımızda içerisinde default olarak gelen bir adet HelloWorld() metodu bulunmaktadır
[WebMethod] // [WebMethod] tag'i altında yazılı olan Metodun bir "Web Method" olduğunu belirten yapıdır. Aslında kabacası bizim internette yayınlayacağımız ve Client tarafında kullanılacak metod olduğunu belirtiyor.
publicstring HelloWorld()  //Herbir .asmx service sayfasında Default olarak gelen parametre almadan geriye string dönen HelloWorld() bulunmaktadır.Browser'da servici çalıştırdığınızda aşağıda resimde olduğu gibi metodları görüyor olacaksınız
DipNot - [WebMethod] tanımlaması yapılan metodlar Browser'da görünmeyecektir, Sadece [WebMethod] etiketine sahip metodlar burda görünür ve Client tarafından direkt olarak kullanılır
{
return"Hello World";
}

4.Adım | Web Service Nasıl Bir İşlem Yapıyor Olacak ?

  • Geliştireceğimiz Web Service local'de bulunan Northwind Database'ine bağlanarak Employees tablosunda bulunan Çalışanların Ad(FirstName), Soyad(LastName) ve İş Tanımı(Title) bilgilerini yayınlıyor olacak.Bunun için öncelikle pc'nizde Northwind database'i bulunuyor olması gerekli. Olmayan arkadaşlar bu Link' teki script'i indirip MS-SQL Management Studio kullanarak kurulum yapabilirler.

5.Adım | Database'den Employees Bilgilerini Çeken Metodun Yazılması

  • Database ile bağlantı kurmanın çeşitli yolları vardır.İster Entity Framework kullanırsınız istersenizde klasik Ado.Net yazarsınız.Ben Ado.Net'in Entity Framework ve yandaşlarına kıyasla 7 kat gibi bir hız farkıyla çalışmasında dolayı Ado.Net kullanıyor olacağım Smile. İlk olarak "Employees" tablosundan "FirstName" ,"LastName" ve "Title" bilgilerini almamız için bu attributelere sahip "Employees" class'ını aşağıdaki gibi oluşturuyoruz
public class Employees
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
 }
  • Şimdi ise Ado.Net kullanarak çekeceğimiz bu Employees'leri List<Employees> array'i oluşturup içerisine atıp sonrasında Web Service' imiz ile yayınlıyor olacağız. Geriye List<Employees> dönen CallEmployees() adında bir metod tanımlayalım ve kodlarımızı aşağıda olduğu içerisine yazalım.
[WebMethod]
public List<Employees> CallEmployees()
{
//Employees'leri içerisine doldurup return ettireceğimiz List<> array
List<Employees> AllEmployees = new List<Employees>();
 
//Local'de bulunan Northwind database'ine bağlanmamızı sağlayan connectionstring'i
SqlConnection conn = new SqlConnection("server=.;database=Northwind;trusted_connection=True");
 
//Hangi bilgileri çekeceğimizi belirttiğimiz sql sorgumuz
SqlCommand cmd = new SqlCommand("select FirstName,LastName,Title from Employees", conn);
conn.Open(); //Sql bağlantısını açıyoruz
SqlDataReader dr = cmd.ExecuteReader();  //DataReader kullanarak verileri alıyoruz
while (dr.Read())
{
//Çektiğimiz verileri Employee nesnesi'nin attribütlerine atayıp sonrasında AllEmployees array'inin içerisine atıyoruz
AllEmployees.Add(new Employees()
{
FirstName = dr.GetString(0),
LastName = dr.GetString(1),
Title = dr.GetString(2)
});
}
//Son olarakda doldurduğumuz array'i return ediyoruz
return AllEmployees;
}
  • Projeyi Run ettiğimizde Browser'da aşağıda olduğu gibi HelloWorld() metoduyla birlikte bizim sonradan tanımladığımız CallEmployees() metodunu görüyor olacağız. 1. resimde bulunan metodumuza tıkladığımızda 2. resimde gördüğümüz sayfa açılıyor olacak ve Çağır butonuna tıkladığımızda son resimde gördüğümüz gibi Database'den gelen veriler XML formatında görüntüleniyor olacak.

 -

 6.Adım | Web Service'in Internet'te Yayınlanması

  • Geliştirmiş olduğunuz bu gibi Web Servic'i yayınlamak için Solution'dan proje üzerine sağ tıklayıp Publish deyip sonrasında generate edilmiş dosyaları web sitenizin bulunduğu ftp' ye atmanız yeterli olacaktır.
  • Yazılmış olan bu web service'i diğer projelerde kullanmak için ise service'in bulunduğu sayfayı projelerinize Reference olarak ekleyip sonrasında içerisinde bulunan metodları kullanabilirsiniz.Biz projede sadece select işlemi yapan bir WebMethod yazdık ama ihtiyaca göre çok daha farklı inserti, update, delete gibi işlemler yapan WebMethod'larda yazılabilir.

 7.Adım | Web Service' de Güvenlik

  • Makalenin başında da bahsettiğimiz gibi Web Service'ler şirketler için büyük önem taşırlar nedeni ise veri'nin sadece istenilen kişiler tarafından kullanılması. Biz yukarıda geliştirmiş olduğumuz projede güvenlik olarak hiç birşey yapmadık yani siz bu projeyi internette publish ettikten sonra çeşitli yazılımlar kullanılarak data-sniffing ile servis'in bulunduğu URL bulunup yazmış olduğunuz metodlar diğer kişiler tarafındanda kullanılabilir.İşte bu gibi durumlarda güvenlik çok büyük öneme sahip oluyor.Konu uzun olduğu için Web Service'de Güvenlik Nasıl Sağlanır ? bir sonraki makalemizde görüyor olacağız. Umarım buraya kadar yazdıklarımız yararlı olmuştur, herhangi bir sorunuz olduğunda e-mail ile ulaşabilirsiniz,

 

Projeyi burdan indirebilirsiniz..

Windows Phone Facebook'a Paylaşım Yapma

1.Adım | Visual Studio Projesi Oluşturulması

  • İlk olarak ismi TestApp olan bir adet Windows Phone Projesi oluşturuyoruz

 2.Adım | Design Sayfasının Hazırlanması

  • Uygulama ekranında bir adet TextBox, bir adette Button ve bir adette WebBrowser Kontrolleri olacak, gerekli kontroller eklediğinde en dışta bulunan Grid Design Kodları aşağıda olduğu şekildedir;

    

<Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock Text="Caner Tosuner" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
            <TextBlock Text="Facebook" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <TextBox Grid.Row="0" Height="150" Name="Message"/>
            <Button Grid.Row="1" Content="Post" Click="Button_Click"/>
        </Grid>
        <phone:WebBrowser Name="Browser" Grid.Row="1" Background="Aqua" Width="450" Height="600" Visibility="Collapsed" Navigated="Browser_Navigated"/>
    </Grid>

 

  • Bu işlemler sonucunda UI aşağıdaki gibi görünecektir.

3.Adım | Facebook AppID Oluşturma

  • Uygulamada Facebook'un geliştirmiş olduğu SDK'yı kullanacağımızdan Facebook bilgilerini kullanacak uygulamayı sistemine kaydetmeyi ve belirli izinler doğrultusunda SDK'yı kullanma izni vermektedir. Bunun için https://developers.facebook.com/apps adresine giderek aşağıda olduğu gibi uygulama oluşturup sonrasında Facebook'un bize vereceği AppID'yi alıp kullanacağız.

     

4.Adım | Facebook SDK'nın Projeye Eklenmesi

  • Facebook'un geliştirmiş olduğu kütüphaneyi uygulamamıza eklemek için Nuget'ı kullanıcaz.Bunun için Visual Studio'dan Tools -> Library Package Manager -> Package Manager Console tıklayıp altta açılan sayfaya  PM> Install-Package Facebook yazıyoruz ve kütüphanenin kurulmasını bekliyoruz. Kurulum tamamlandıktan projemizin References bölümüne aşağıda olduğu gibi Facebook'un eklendiğini görüyor olacaksınız.

5.Adım | FacebookClient Oluşturulup AppID Değerinin Kullanılması

  • FacebookClient nesnesi bizim Facebook API'ları ile connection'ı kurup bütün veri alış verişini sağlayacak olan yapıdır. Facebook'ta yeni uygulama oluştururken bize verilen AppID/App Key kodunu aşağıda AppID değişkenine atıyoruz ve Facebook böylece hangi uygulamanın API'larını kullandığı gibi bilgilere ulaşmış oluyor.
private const string AppID = "Facebok App ID";
private FacebookClient client;
// Constructor
public MainPage()
{
InitializeComponent();
client = new FacebookClient();
 }

6.Adım | Post Buton'u Click Event'i

  • Uygulamadaki senaryo şu şekilde işliyor olacak; TextBlock'a girilen string Post butonuna tıklandığı anda SDK'yı kullanarak Facebook'a bağlanıp kullanıcı adı ve şifre bilgileri doğru girildiğinde bize authentication verecek ve sonrasında paylaşım yapmamızı sağlayacak. Aşağıda Post butonuna tıklandığında çalışacak olan kodlar bulunmaktadır.
private void Button_Click(object sender, RoutedEventArgs e)
{
//API' ile birlikte gönderilecek olan parametreler
var parameters = newDictionary<string, object>();
parameters["client_id"] = AppID;
parameters["redirect_uri"] = "https://www.facebook.com/connect/login_success.html";
parameters["response_type"] = "token";
parameters["display"] = "touch";
 
parameters["scope"] = "publish_stream";
Browser.Visibility = System.Windows.Visibility.Visible;
Browser.Navigate(client.GetLoginUrl(parameters));
}

Bütün bu işlemleri hatasız bir şekilde yapıp uygulamamızı çalıştırdığımızda aşağıdaki gibi bir görüntü alıyor olacağız.

7.Adım | Browser Navigation Event'i

  • Kullanıcı UserName ve Password bilgilerini girip giriş yaptıktan sonra Browser, bizim access token'ımızın yani doğru bir şekilde giriş yaptığımıza dair gerekii bilgiyi API'ları çağırmak için bir URL'e navigate edilecek. Browser'ın Navigated Event'i aşağıdaki gibi olacak.
private void Browser_Navigated(object sender, NavigationEventArgs e)
{
FacebookOAuthResult oauthResult;
//URL'in erişim izni olduğunu kontrol ediyoruz
if (!client.TryParseOAuthCallbackUrl(e.Uri, out oauthResult))
{
return;
}
//Checking that the user successfully accepted our app, otherwise just show the error
if (oauthResult.IsSuccess)
{
client.AccessToken = oauthResult.AccessToken;
 
Browser.Visibility = System.Windows.Visibility.Collapsed;
DuvaraGonder();
}
else
{
MessageBox.Show(oauthResult.ErrorDescription);
Browser.Visibility = System.Windows.Visibility.Collapsed;
}
}

8.Adım | DuvaraGonder() Metodu

  • Bütün bu işlemleri yaptıktan sonra artık başarılı bir şekilde Facebook'a giriş yaptık ve gerekli izinleri aldık bundan sonra yapmamız gereken şey TextBox'dan girilen değeri DuvaraGonder() metodunu kullanarak Timeline Duvarımıza göndermek.
private void DuvaraGonder()
{
var parameters = new Dictionary<string, object>();
parameters["message"] = Message.Text;
client.PostAsync("me/feed", parameters);
}

9.Adım | PostCompleted() Metodu

  • Kullanıcı Post butonuna tıkladıktan sonra göndermiş olduğumuz mesajın başarılı bir şekilde gidip gitmediğini öğrenmek için PostCompleted() metodundan yararlanabiliriz. Gerekli kodları constructor'ın içerisinde EventHandler'ın içerisine ekliyor olacağız.
// Constructor
public MainPage()
{
InitializeComponent();
client = new FacebookClient();
client.PostCompleted += (o, args) =>
{
//Hata Kontrolünün yapıldığı bölüm
if (args.Error != null)
{
Dispatcher.BeginInvoke(() => MessageBox.Show(args.Error.Message));
}
else
{
Dispatcher.BeginInvoke(() => MessageBox.Show("Mesaj başarılı bir şekilde gönderildi"));
}
};
}

10.Adım | Proje Test İşlemi

  • Buraya kadar yazmış olduğumuz kodlar sayesinde artık Facebook'a giriş yapıp TextBlock içerisine yazılan metni Post butonuna tıklandığında Facebook sayfamıza gönderiyor olacağız. Bir üstte yazdığımız 9.Adım'da göndermiş olduğumuz metnin Gidip Gitmediği hakkında bilgide alabiliyoruz. Uygulamayı çalıştırdığımızda ekran görüntüsü aşağıdaki gibi olacaktır.

                                               

11.Adım | Access Token'ın IsolatedStorage ile Kaydedilmesi

  • Kullanıcının uygulamayı kullanıp her Facebook Share işleminde UserName ve Password bilgilerini girmesi hiç istenen birşey değildir. Bizde bunun için Access Token bilgisini IsolatedStorage ile uygulama içerisine kaydedecez.Bunun için SaveAccessToken() adında bir metod yazıcaz.
private void SaveAccessToken(String token)
{
if (!IsolatedStorageSettings.ApplicationSettings.Contains("token"))
IsolatedStorageSettings.ApplicationSettings.Add("token", token);
else
IsolatedStorageSettings.ApplicationSettings["token"] = token;
IsolatedStorageSettings.ApplicationSettings.Save();
}

12.Adım | Access Token'ın IsolatedStorage'dan Okunması

  • Uygulama içerisine kaydettiğimiz Access Token bilgisini kullanıcı paylaşım yapmak istediğinde tekrardan IsolatedStorage'dan okuyor olmamız gerekiyor.Aşağıda bu işlemi yapan GetAccessToken() metodumuzun kodları bulunmaktadır.
private string GetAccessToken()
{
if (!IsolatedStorageSettings.ApplicationSettings.Contains("token"))
return null;
else
return IsolatedStorageSettings.ApplicationSettings["token"] as string;
 }

13.Adım | Uygulama Açıldığında Access Token'ın Kontrol Edilmesi

  • Gerekli metodları yazdıktan sonra uygulama açılış anında ya da her nerde gereki ise AccessToken var mı ? yok mu ? kontrol etmemiz gerekmektedir.Bunuda aşağıda olduğu gibi yapıyoruz.
//AccessToken var mı yok mu kontrolü
if (GetAccessToken() != null)
client.AccessToken = GetAccessToken();

  14.Adım | Expire Olan Token'ın Kontrol Edilmesi

  • PostCompleted handler'ı içerisinde bu kontrolü yapmamız gerekiyor ve kodlar aşağıda olduğu gibi Contructor'ın içerisinde yazıyoruz.
client.PostCompleted += (o, args) =>
{
//Hata Kontrolünün yapıldığı bölüm
if (args.Error != null)
{
//Yetki Hatası
if (args.Error is FacebookOAuthException)
{
Dispatcher.BeginInvoke(() => MessageBox.Show("Yetki Hatası"));
//Hata oluştuğundan dolayı Saved Token'ı uçuruyoruz
SaveAccessToken(null);
client.AccessToken = null;
}
else
Dispatcher.BeginInvoke(() => MessageBox.Show(args.Error.Message));
}
else
   Dispatcher.BeginInvoke(() => MessageBox.Show("Mesaj başarılı bir şekilde gönderildi"));

};

15.Adım | Back Buton'nuna Tıklanılması

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
//Browser görünüyor ise gizle ve navigation event'i iptal et
if (Browser.Visibility == System.Windows.Visibility.Visible)
{
Browser.Visibility = System.Windows.Visibility.Collapsed;
e.Cancel = true;
}
base.OnBackKeyPress(e);
}

16.Adım | Haydi Test Edelim :)

Windows Phone'da Web Service Kullanımı

Mobil tarafta uygulama geliştiriyorsanız Web Service’den kaçışınız imkansızdır. Çünkü database’ler ile mobil uygulama arasındaki iletişimi sağlayacak hizmet Web Service tir ve mobil uygulama aktarılacak olan veri XML yada JSON tipinde yayınlamaktadır. Bu makalede IMKB’den aldığı sonuclarla anlık Döviz Verilerini paylaşan bir XML Web Service’den gelen verileri alıp Parse işlemi yapıp daha sonrasında WP uygulamamızda gösteriyor olacağız.

 

Öncelikle ilk olarak Visual Studio’yu açıp 1 adet adı XML_Parse olan Windows Phone Pivot App Projesi oluşturalım.

 

Design sayfasında Default olarak gelen xaml kodlarını tamamiyle temizleyelim. Bunun için En dıştaki Grid içerisinde bulunan kodları silmek işimizi görecektir. Grid içerisindeki kodları sildiğimizde son hali aşağıda olduğu gibidir.

    

<!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
                  //Bu bölümdeki kodları temizledik
    </Grid>

 

 Bir sonraki işlem olarak Design sayfasını istediğimiz şekilde düzenleyelim. Görünüm olarak daha güzel görüneceğini düşündüğümden WrapPanel kullanmayı tercih ettim.WrapPanel sayesinde uygulama ekranına dinamik olarak yerleşecek Buton’lar Panorama Page gibi geliştirilmiş uygulama havası katacaktır. WrapPanel kullanmak için ilk olarak bir dll’i projenize referans vermeniz gerekiyor. http://silverlight.codeplex.com/downloads/get/270984 sitesinden Silverlight Toolkit kurup daha sonrasında aşağıda olduğu gibi Solution Explorer’da projeniz içerisinde bulunan References’a sağ tıklayıp Add Reference diyip aşağıda dosya yolunda bulunan dll’i projenize referans olarak ekliyorsunuz.

For 32-bit systems:

C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Aug11\Bin\Microsoft.Phone.Controls.Toolkit.dll

For 64-bit systems:

C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Aug11\Bin\Microsoft.Phone.Controls.Toolkit.dll

Referansı ekledikten sonra uygulamamızın design sayfasına da aşağıda bulunan kod’u yazıyoruz.

 

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

Şimdi xaml kodlarını yazmaya başlayabiliriz. Design tarafında kullanacağımız kontrollerin kodları aşağıdaki gibi olacaktır.

       

<Grid.Background>
        <!--Pivot Control-->
        <controls:Pivot x:Name="dovizpivot">
            <!--Pivot item one-->
            <controls:PivotItem Header="Döviz Verileri">
                <ListBox x:Name="lbdovizler" ScrollViewer.VerticalScrollBarVisibility="Disabled" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <toolkit:WrapPanel></toolkit:WrapPanel>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <Button x:Name="btndoviz" Content="{Binding ADI}" FontSize="32" Background="#0076dd" FontWeight="Bold" Foreground="White" Height="120" Width="150">
                                </Button>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </controls:PivotItem>

 

Senaryo şu şekilde işliyor, Xml olarak gelen verileri Parse edip bir array’in içerisine atacaz ve o array’ide üstte yazdığımız lbdovizler lsitbox’ına ItemsSource olarak verecez. Sonrasında listbox’ın ItemTemplate’inde bulunan Buton’un Content’ine Bind olarak oluşturacağımız object’in ADI attribute’ünü verdiğimizden o Döviz’in ismi ekranda görünecektir.

 Şimdi ise CodeBehind’a geçelim..

Gelen Veriyi Dovizler adında class oluşturarak ona atayacağız, class aşağıdaki şekilde olacaktır.

   

//Service’in sunduğu Xml formatı aşağıdaki gibi.Bize DOVIZ türünde ADI,ALIS,SATIS attributleri olan altinkaynak adında array dönüyor

 public class Dovizler
    {
        public string ADI { get; set; }
        public string ALIS { get; set; }
        public string SATIS { get; set; }
    }

//Dovizleri saklayacağımız List array’i tanımladık.

        List<Dovizler> Dovizler = newList<Dovizler>();
        public MainPage()
        {
            InitializeComponent();
            GetResult();  //GetResult Metodunu çağırıyoruz
        }
//GetResult Metodu bize Web Service’in bulundu adrese giderek orda XML olarak yayınlanmış verileri getirecektir.
        publicvoid GetResult()
        {
            WebClient wc = newWebClient();
            wc.DownloadStringCompleted += wc_DownloadStringCompleted;
            wc.DownloadStringAsync(newUri("http://xml.altinkaynak.com.tr/doviz.xml")); //Service URL’i
        }

 

void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error != null)// Eğer hata mesajı döner ise metod’dan çıkıyoruz
                return;
            try
            {
                XElement xel = XElement.Parse(e.Result);  //gelen veriyi xel’e atıyoruz ve sonrasında nesne haline getirerek array’in içerisine insert ediyoruz
                 Dovizler = from dv in xel.Elements("DOVIZ") //Doviz nesnesine gitmesini söyledik
                           selectnewDovizler()
                           {
    //Doviz nesnesinin hangi attributlerini alacağımızı belirtiyoruz
                               ADI = dv.Element("ADI").Value,
                               ALIS = dv.Element("ALIS").Value,
                               SATIS = dv.Element("SATIS").Value
                           };
                // Son olarak Array’i lbdovizler ListBox’ına ItemsSource olarak veriyoruz
                lbdovizler.ItemsSource = Dovizler;
            }
            catch (Exception)
            {
                MessageBox.Show("Lütfen Daha Sonra Tekrar Deneyin.", "Bilgilendirme", MessageBoxButton.OK);
                return;
            }
        }

Uygulamanın ekran görüntüsü aşağıda olduğu gibidir.

Isolated Storage Kullanımı

Windows Phone' uygulama içerisinde veri saklamak için kullanabileceğimiz çeşitli yapılar vardır. Bunlardan birtanesi IsolatedStorage'dır. IsolatedStorage kullanarak uygulamanın kullanıcı tarafından değiştirilmiş ayarlarını, yada uygulamada UserName Password gibi bilgiler gerekli ise bu bilgileri uygulama her açıldığında sürekli kullanıcıya sormak yerine ilk seferde kullanıcıdan bu bilgileri alıp IsolatedStorage içerisine kolayca kaydedebiliriz.

IsolatedStorage Veri Yazma

private void DosyayaYaz(string text)
{
IsolatedStorageFile storage= IsolatedStorageFile .GetUserStoreForApplication();
IsolatedStorageFileStream fs =storage.CreateFile("data.txt");
StreamWritersw =newStreamWriter(fs);
sw.Write(text); //Metoda gelen text değişkeni içerisindeki değer IsolatedStorage ile data.txt dosyası içerisine kaydedilir
sw.Close();
}

 

IsolatedStorage Veri Okuma

private string DosyadanOku()
{
IsolatedStorageFilestorage= IsolatedStorageFile.GetUserStoreForApplication();
if (storage.FileExists("data.txt"))  //daha öncesinde oluşturduğumuz data.txt adlı dosya varmı diyee kontrol ediyoruz
{
IsolatedStorageFileStream fs = storage.OpenFile("data.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read);
StreamReader sr=new StreamReader(fs);
string kayitliVeri = sr.ReadToEnd();
sr.Close();
}
else
{
return String.Empty; //eğer o isimde bir dosya yok ise boş değer döndürüyoruz
}
return kayitliVeri ;
}

IsolatedStorage Veri Silme

private void DosyaSil()
{
IsolatedStorageFile storage= IsolatedStorageFile.GetUserStoreForApplication();
if(storage.FileExists("data.txt"))
     storage.DeleteFile("data.txt");
else
   return ;
}

>> catch {Foot in Mouth} 'e düşmemeniz dileğiyle.. Smile <<

 

Log4Net Database Logx

Log4Net .net uygulamaları için geliştirilmiş olan açık kaynak kodlu bir log’ lama kütüphanesi ve Java’da bulunan loglama aracı Log4J'nin .NET uyarlamasıdır.

 

Log Seviyeleri

ALL : Tüm mesajların loglandığı seviyedir.

DEBUG : Developement aşamasına yönelik loglama seviyesidir.

INFO : Uygulama içerisindeki bilgileri loglayabildiğiniz seviyedir.

WARN : Hata olmayan fakat önemli bir durumun oluştuğunu belirtebileceğimiz seviye.

ERROR : Hata durumunu belirten seviye. Sistem hala çalışır haldedir.

FATAL : Uygulamanın sonlanacağını, faaliyet gösteremeyeceğini belirten mesajlar için kullanılacak seviyedir.

OFF : Hiç bir mesajın loglanmadığı seviyedir.

 

Log’lanacak bilgiler file system tarafında ya da database’de kaydedilebilmektedir.

DBLog adında bir database oluşturalım ve Log kayıtlarını tutacağımız Log adında aşağıda olduğu gibi bir tablo yaratalım

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
)

 

Uygulama içerisinde App.cofig ya da Web.config sayfalarının içerişini aşağıda olduğu gibi yapıp sadece connectionstring’ini değiştirmeniz yeterli olacaktır.

<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,
Log4net"/>
  </configSections>
  <log4net>
    <root>
      <levelvalue="DEBUG" />
      <appender-refref="ADONetAppender" />
    </root>
    <appendername="ADONetAppender"type="log4net.Appender.ADONetAppender">
      <bufferSizevalue="100" />
      <connectionTypevalue="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionStringvalue="server=serveradi; database=databaseadi;trusted_connection=true;" />
      <commandTextvalue="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterNamevalue="@log_date"/>
        <dbTypevalue="DateTime"/>
        <layouttype="log4net.Layout.RawTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterNamevalue="@thread"/>
        <dbTypevalue="String"/>
        <sizevalue="255"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%thread"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@log_level"/>
        <dbTypevalue="String"/>
        <sizevalue="50"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%level"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@logger"/>
        <dbTypevalue="String"/>
        <sizevalue="255"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%logger"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@message"/>
        <dbTypevalue="String"/>
        <sizevalue="4000"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%message"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@exception"/>
        <dbTypevalue="String"/>
        <sizevalue="2000"/>
        <layouttype="log4net.Layout.ExceptionLayout"/>
      </parameter>
    </appender>
  </log4net>
</configuration>

CodeBehind tarafında ki kodlar ise şu şekilde olacaktır

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.
MethodBase.GetCurrentMethod().DeclaringType);
        private void button1_Click(object sender, EventArgs e)
        {
            log4net.Config.XmlConfigurator.Configure();
            log.Debug("log Debug");
            log.Info("log Info");
            log.Warn("log Warn");
            log.Error("log Error");
            log.Fatal("log Fatal");
        }

  

Bu işlemler sonrasında database’de ki tabloya kayıtlar insert olmuş olacaktır.

 

Android'den fazla C# kodu yazılan Google Hackathon'u :)

     ODTÜ Teknokent, Google Türkiye ve Amerika Birleşik Devletleri Büyükelçiliği iş birliği ile 16-17 Mayıs 2013 tarihinde Orta Doğu Teknik Üniversitesi’nde gerçekleşen “Social Entrepreneurship Hackathon” adlı yarışmaya Kadir Has Üniversitesi'ni temsilen 5 arkadaş katıldık.

         Aslında üniversitede ki hocam Selçuk Öğrenci bana ilk "Android hackathon var gitmek ister misin ?" diye sorduğunda ilk başta "tabi hocam hemen giderim, nerede ne zaman ?.. " gibi konuştuktan sonra kendi kendime bi sordum "Caner hayırdır ?.. Markette 16 tane uygulamam ver derken bu android market değil Windows Phone abicim..." falan filan derken bu düşüncemi sonrasında Selçuk hocamla da paylaştım ama o yinede benden katılmamı ve şakayla karışık takımın "Core" denen şeysi olmamı söyledi :)

Bende emir büyük yerden deyip tamam hocam elimden gelen neyse üstüne dahasını katarak arkadaşlara yardım edeceğimi söyledim. Neyse 15 Mayıs günü yola çıktık ve yaklaşık 6-7 saat içerisinde gece 23:15 gibi Ankara'ya vardık. Ankara dışından gelen öğrenciler TEDAS Misafirhanesi'nde konaklayacak diye söylemişlerdi bizde geceyi orada geçirdik.Sabah ODTU Kültür Merkezine geçtik ve orada açılış konuşmasının olacağı salona gittik. Google Türkiye ekibinden, ODTU Teknopark ekibinden, ABD Büyük elçiliğinden ve Teknoloji bakanlığından gelen konuşmacıları dinledikten sonra 2-3 saatlik bir ara verdik ve sonradan 22 saat sürecek olan non-stop coding yani Hackathon başladı. Arkadaşlarla geliştirmeye karar verdiğimiz uygulamanın adı "EBS" Engelli Bildiri Sistemi'ydi. Ne yapacaktı EBS ; aslında içinde biraz Twitter biraz Instagram olan bir uygulama gibi düşünebiliriz.

        Engelli vatandaşlara hizmet verecek olan uygulamanın ana işlevi şu şekilde olacak; diyelim ki engelli bir   vatandaşımız sokakta yolda giderken kendisine engel teşkil eden bir durumla karşılaştığında uygulamasını açıp lokasyon bilgisine göre bulunduğu yerin Belediyesi'ne Fotograf, Açıklama, Yer Bilgilerini göndererek engel hakkında bildiri/şikayet yapabiliyor olacaktı. Sağtarafta bulunan fotoğrafı uzun bir süre önce internette görmüştüm örnek olacağını düşünerek paylaşmak istedim. Bu vatandaşımızı örnek alacak olduğumuzda ;

        Engelli vatandaş bu karşılaştığı engel karşısında uygulamasını açıp sorumlu belediyeye sorunun fotoğrafını çekip, açıklamasını yazıp gönder butonuna basacak ve bu bildiri Belediye nin sahip olduğu Web arayüzüne düşüp görüntülenecek Belediye tarafından görüntülenecek ve sorun giderildiğinde o şikayeti yapan vatandaş mail yoluyla "Sorun giderilmiştir" şeklinde bilgilendirilecek.

    Aslında fikir bence gayet güzeldi çünkü etkinliğin adı Sosyal Girişimcilik olduğundan uygulamanın içeriği hem Sosyal olmalıydı ve toplumsal bir soruna parmak basıyor olması gerekiyordu. 

Yazılımsal olarak neler gerekli diye düşündüğümüzde ;

  1. Öncelikle Server'da tutulan Sağlam bir Database 
  2. Mobil uygulama ile iletişimi sağlayıp bütün ihtiyaçlara cevap verecek iyi bir WebService,
  3. Belediyeler tarafında gelen bildirimleri görüntülemek için kullanılacak fonksiyonel bir Web Sayfası.
  4. Ve tabi son olarak da Android uygulaması :)

        1, 2 ve 3. şıklar benim yapacağım konulardı. İlk olarak MS-SQL kullanarak kullanışlı bir Database geliştirdim ve bu Database'i Azure Cloud servisimde sakladım. Sonrasında WCF kullanarak json formatında yayın yapan bir adet Web Service geliştirdim. En son olarak da ASP.Net kullanarak belediyeler için bir adet Web Sayfası geliştirdim. Şaka gibi ama bütün bunlar 6 saat içerisinde bitmişti Hackathon bu olsa gerek Smile.

Android uygulaması üzerinde çalışan arkadaşlar o sırada geliştirmeye devam ediyorlardı. 22 saatin sonunda maalesef arkadaşlar Android uygulamasını tam istediğimiz haliyle yetiştiremediler Frown Sunumumuzu yaptık ve sıralamaların açıklanmamıştı ve birincide olamamıştık.

Aslında bi ara şey diye düşünmedim değil; "Acaba çok mu fazla Microsoft'u işin içerisine soktum ?.." çünkü baktığımızda üstte saydığım gibi yazılımsal olarak 4 adet görev yada geliştirilecek yapı vardı ve bunlardan 3 tanesinde tamamiyle Microsoft'un izi vardı, MS-SQL Database, WCF WebService ve Asp.Net Web Sayfası :) Etkinlik sonunda arkadaşlarla oturup bi baktığımızda şaka maka Android kodundan fazla C# vardı işin içerisinde Cool 

Ama her şeye rağmen gayet güzel ve eğlenceli bir hackathon oldu, kişisel deneyim olarak bir çok şey kazandım gibi zira önümüzdeki sene Microsoft'un her yıl düzenlediği Imagine Cup yarışmasına katılmayı düşünüyordum ve bu deneyim benim için gerek sunum noktasında, gerek takım olarak çalışabilme konusunda gerekse işin sosyallik kısmında son derece katkıları oldu diye düşünüyorum. Umarım Selçuk hoca bize ilerleyen zamanlarda da bu tür görevler paslar ve bizde okulumuzu (1. olamazsakda) en iyi şekilde temsil etmeye çalışırız Laughing

 

 

Windows 8.1 Tanıtım Videosu Yayınlandı

Windows 8'e gelecek en büyük ve en kapsamlı güncelleme olması beklenen Windows 8.1'in kullanım videosu yayınlandı.

Windows 8 ilk çıktığı günden buyana birçok konuda eleştirilse de yayınlanacak olan 8.1 güncellemesi ile birlikte Microsoft'un birçok değişiklik yaparak eleştirilere cevap vereceği söyleniyordu. 

26 Haziranda düzenlenecek olan Microsoft Build geliştirici konferansında kullanıma sunulacak Windows 8.1 güncellemesinden önce Microsoft dün yayınladığı video ile birlikte Windows 8.1'de ne gibi değişiklikler var duyurmuş oldu.

Kısaca ne gibi deşiklikler var dersek ;

      • Herkesin merakla beklediği "Başlat" butonu geri gelmemiş gibi duruyor,
      • Uygulamaları Kategorize edebilme özelliği,
      • Birden fazla uygulama Tile' larını seçip aynı anda taşıyabilme,
      • Metro arayüzünde hareketli duvar kağıdı özelliği,
      • Metro arayüzünde bulunan her bölümün tema rengini değiştirebilme,
      • Yenilenmiş Skydrive uygulaması
      • Denetim Masası'ndan yapılan bütün işlemleri yeni eklenen Ayarlar bölümünden yapabilme,
      • Lock Screen'de hareketli arka plan resimleri ekleme,
      • Daha büyük Tile oluşturabilme özelliği,
      • Metro arayüzde iken ekranı aşağıdan yukarıya doğru çektiğinizde açılan "All Apps" sayfası,
      • Uygulamaları Kategorize edebilme özelliği,
      • Yeni Search uygulaması ile birlikte aranan her kelimeyle ilgili bulunan sonuçların kullanıcıya kategorilenmiş olarak sunulması,

 

  

IIS Network Load Balancing

IIS Load Balancing Nasıl Yapılır ?

 

IIS üzerinde Load Balancing (NLB) Network Load Balancing Manager Programı ile yapılır , ağ yükünün yük dengeleme ve hata toleransına bağlı olarak birden fazla sunucuya dağılımını yapan servistir.

 Server Üzerinde Network Load Balancing  Aktifleştirme (NLB)

 1.       Open the Server Manager of your Windows Server by opening your Start Menu and clicking Administrative Tools      » Server Manager.

2.       In the navigation tree on the left, click Features.

3.       In the right pane, click Add Features.

4.       From the list of features that appear, select Network Load Balancing and click Next » Install. An installation progress bar appears.

5.       When installation is finished, click Close.

 Cluster yapısı:Network üzerinde tek bir sistem olarak görünen bir grup server.

Node: Cluster içerisindeki sunuculara verilen ad..

NLB cluster max 32 Node’dan oluşur.

 Cluster yapıları Aktif/Aktif ya da Aktif/Pasif çalışabilir.

Aktifdurumdaki sunucu cluster yapısı içerisinde, cluster yapısına gelen isteklere doğrudan cevap veren sunucudur.

Pasifolan sunucu ise cluster yapısı içerisinde Aktif durumdaki makinede donanımsal ya da yazılımsal bir sorun olması durumunda onun yerine geçebilecek şekilde hazırda bekleyen sunucudur. 

Aktif/Aktif Cluster yapısı ağ üzerinde yük dengeleme işlevini yerine getirir. Aktif/Pasif Cluster yapısı ise hata toleransını sağlamaya yöneliktir. Aktif/ Aktif Cluster yapısına Load-Balancing Cluster, Aktif/Pasif Cluster yapısına ise Fault-Toleranced Cluster denilebilir.

 

Network Load Balancingdonanımsal ya da yazılımsal olarak sağlanabilir. Donanımsal Load Balancing cihazları NLB’yi Aktif/Aktif yaparlarken Microsoft Server 2003 işletim sistemi içerisinde NLB Manager ile Load Balance yapılandırılırken Aktif/Aktif  ya da Aktif/Pasif Cluster yapılabilir.

NLB’de kullanıcıların Session bilgileri tutulamıyor, bu yüzden IIS sunucuları yapılandırarak bilgileri tutmak gerekir.

Session tutmadığımız durumda kullanıcının NLB yapısından kaynaklanan bir şekilde bir sunucuya ya da diğer sunucuya gönderilmesi sonucu session bilgileri kaybolacaktır.

Örneğin kullanıcı, sunuculardan birinde, sayfalardan biri için şifre girdiğinde sayfa içerisindeki linklerden birine basarak başka bir sayfaya gitmek istediğinde, NLB yapısı bu istek sonucu kullanıcıyı başka bir sunucuya yönlendirirse web browser kullanıcıya tekrar şifre soracaktır. 

Web Uygulamaları için session bilgileri IIS tarafından asp.net yardımı ile tutulabilir.

Session verilerini tutmanın 3 türlü yöntemi vardır:

1-    In Process Mode(inProc)

inProc moda session bilgileri aspnet_wp.exe dosyasına bağlı olarak her sunucu içinde bireysel olarak tutulur

2-    State Server Mode

State Server Mode’da ise session bilgileri serileştirilerek sunucuların RAM’lerinde bir birinden bağımsız process’ler olarak tutulur

3-    Out of Process – SQL Server Mode(outProc)

SQL Server Mode’da session bilgileri serileştirilmiş yani serializable bir şekilde SQLsunucuda tutulur

Çalışma Şekli..

NLB sürücüsü NIC sürücüsü ile IP protokolü arasına yerleşir ve böylece tüm NLB kümesi üyelerine gelen her paketi alıp inceler. Paket kablodan Cluster’a geldiğinde her node paketi alır ve inceler ve cluster çapında belirtilmiş kurallara göre paketi üst katmanda bulunan IP protokolüne iletir veya paket daha NLB sürücüsündeyken atılır. Böylece trafik node’lar arasında paylaştırılır. Kısaca tüm node’lar Cluster’a gelen trafiği alır ama tüm node’lar cevap vermez.

Sorun Olduğunda..

NLB Cluster üyesi olan bir sunucu hata verdiğinde NLB Cluster grubundaki diğer sunucular, offline duruma düşen sunucunun üzerindeki iş yükünü üstlenirler. Hata veren sunucu tekrar online durumuna geçtiğinde, NLB servisi görev dağıtımını yeniden düzenleyerek online duruma geçen sunucuya yeni görevini atamaktadır

 Network Load Balanacing yönetimi için temel olarak Network Load Balancing Manager snap-in kullanılır. Bununla birlikte network kartı özellikleri penceresinden de NLB ayarları yapılabilir.