Caner Tosuner

Leave your code better than you found it

NFC Nedir ?

NFC, 2004 yılında Nokia, Sony ve NXP’nin 2004 yılında bir araya gelerek oluşturduğu bir temassız iletişim standardıdır.

 

 

  • NFC haberleşmesi iki NFC uyumlu cihazın birbirine birkaç santimetre yaklaştırılması ile aktifleştirilir. NFC uygulamaları; ödeme ve toplu taşıma biletleri gibi temassız işlemleri, takvim senkronizasyonu veya elektronik kartvizit gibi basit ve hızlı veri transferini ve dijital içeriklere erişimi kapsamaktadır.

 

  • NFC’ yi diğer ağ teknolojilerinden ayıran en büyük özellik iki NFC cihaz arasındaki bağlantının saniyenin onda birinden daha kısa sürede sağlanmasıdır ve böylelikle son kullanıcıyı bekletmeden veri transferini sağlamaktadır.

 

  • NFC sadece cep telefonu ile temassız ödeme veya veri transferi yapmak demek değildir, temassız iletişim sağlayan cihazlar için oluşturulan standardın adıdır.

 

  • Günlük hayatta Cep telefonları, turnikeler, otomatlar, parkmetreler, POS’ lar, ATM’ ler, ofis, ev veya garaj kapıları, kişisel bilgisayarlar, posterler... vb. birçok alanda kullanılması beklenmektedir.

 

 

Asmx ve WCF Arasındaki Farklar

  • Asmx SOAP ve Http kullanarak mesajlaşabilirken, WCF default olarak Http olmasıyla birlitke TCP/IP, MSMQ, NamedPipes etc. gibi yapıları da kullanabilmekte.

 

  • Asmx servisler sadece IIS üzerinde Host edilebilirken, WCF IIS, WAS (Windows Process Activation Services), Console Application, Windows NT Services üzerinde host edilebilmektedir.

 

  • Asmx’de güvenlik sınırlıdır. Kimlik doğrulama ve yetkilendirme işlemleri IIS,  Asp.Net ve TCP Protokolü kullanılarak yapılır ve kesin bir güvenlik tutarlılığı yoktur. WCF her bir protokol için ayrı bir güvenlik hizmeti sağlar ve bu yönden daha tutarlı bir güvenlik alt yapısına sahiptir.

 

  • Asmx’de class’a [WebService] tag’i eklenmeliyken, WCF’de class’a [ServiceContract] tag’i eklenmelidir

 

  • Asmx serilization işlemi için XmlSerializer kullanırken WCF XmlSerializer’den daha performanslı olan DataContractSerializer’ı kullanır.

 

WCF Nedir ? (Windows Communication Foundation)

  • .Net Framework 3.0 ile birlikte gelmiştir.
  • Farklı platformlar arasında iletişim sağlamak ve Service Oriented Architecture – SOA için uygulamalar geliştirmek için geliştirilmiştir.
  • Web servisini yayımlamak için HTTP, WSHTTP gibi protokoller kullanılabilir.
  • Servisler IIS üzerinde http kuralları kullanılarak yayınlanabilir, ya da Windows üzerinde TCP - Pipe gibi yöntemlerle barındırılabilir.

 

WCF ana hatlarıyla 3 kısma ayrılır (A-B-C)

1.   Address

-        Bir servisin nerede olduğunu, hangi protokol ile yayınlama yaptığını bildiren bilgidir. Aktif olarak çalışan her servis WCF’ye göre eşsiz bir adrese sahip olmalıdır. 

 

WCF servisine ulaşabilmek için kullanılabilecek protokoller;

-        HTTP (http:// veya https://)

-        TCP (net.tcp://)

-        Peer 2 Peer (net.p2p://)

-        IPC (net.pipe://)

-        MSMQ (net.msmq://)

2.   Binding

-        Uygulamalar tarafından veri göndermek ya da veri almak için servis ile nasıl iletişime geçileceğinin tanımlandığı bölüm. WCF hizmetleri için kullanılabilecek ön tanımlı binding’ ler;

 

 

3.   Contract

-        Bir servisin ne iş yaptığının bilinmesinde rol oynar. Bazı sözleşmeler şunlardır:

·        Servis sözleşmesi (Service Contract): Servis ile yaratılacak olan operasyonların tanımlanmasında kullanılır.

 
 [ServiceContract]

   public interface IService1

   { }
 

·        Veri Sözleşmesi (Data Contract): Servis içerisinde bulunan class’ları tanımlamak için kullanılır. Sınıfların üyeleri Data Member olarak tanımlanır.

 

   [DataContract]
   public class MyClass
   { }
 
            [DataMember]

            public string StringValue

            {

               get { return stringValue; }

               set { stringValue = value; }

            }


 

·        Hata Sözleşmesi (Fault Contract): Servis tarafından tanımlanacak olan hatalar bu yolla tanımlanır.

·        Mesaj Sözleşmesi (Message Contract): Servisler ile mesajlar arasında iletişim kurulmasını sağlar.

 

Endpoints

Clients ile Host arasındaki iletişimi şağlamak için kullanılan bir arayüzdür. Her endpoint’in kendi adresi vardır ve bu adresin benzersiz olması için servisin kendi ana adresine eklenmektedir. Bir WCF servisini aslında endpoint topluluğu olarak düşünebiliriz.

Behaviors

Servis davranışları, servislerin veya istemcilerin fonksiyonelliklerini arttırmak için kullanılırlar. Örneğin servislerin metadata bilgisinin paylaşılıp paylaşılamayacağı, ekstra güvenlik eklenmesi, tracking tracing logging gibi bilgilerin tutulması, parametre ve mesajların validasyonları, hata alındığı durumlarda detayları exception bilgisinin istemci tarafına gönderilip gönderilemeyeceği gibi.

 

Yeni bir WCF hizmeti tanımlarken ilk olarak sunulması hedeflenen fonsiyonaliteler netleştirilip ve bir contract ile duyurulur. Bu contract’ lar interface’lerin içerisine yazılırlar.

  [ServiceContract] //Contrat’ın bir hizmette kullanılacağını belirtmek için interface’in üst kısmına ServiceContract yazılır
    public interface IServiceImpl
    {
        [OperationContract] //Oluşturulan metodların service tarafından kullanılabilmesi için uygulanan etikettir.
        bool SaveData(string Val); //string tipinde bir parametre alarak gelen değeri kaydeden bir metod.
 
//XML ya da JSON formatında internet üzerinde ya da local’de veri yayınlamak istediğimizde aşağıda bulunan kodlara benzer yapılar kullanılır.
        [OperationContract]
        [WebInvoke(Method = "GET",  //GET metodunun kullanılacağı belirtildi.
            ResponseFormat = WebMessageFormat.Xml, //Geriye dönen veri XML formatındadır.
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "xml")]      //Url’de bu metodun çağırılmasını sağlayacak string
        List<Employee> XMLData();       //Geri dönüş tipi ile birlikte Metod ismi.
    }

 
//Belirtilmiş olan kontratlara uygun metodlar class içerisine yazılır.
namespace MyService
{
    public class ServiceImpl : IServiceImpl
    {
        public bool SaveData(string val)  //interface içerisinde tanımlanan servis kontratı.
        {
            return true;
        }
 
        public List<Employee> XMLData()//interface içerisinde tanımlanan XMLData servis kontratı
        {
            return new List<Employee>();           
        }
   }
}

 

Proje içerisinde bulunan app.config/Web.config sayfaları içerisinde kullanılacak kontratlar endpoint’ ler içerisinde tanımlanır ve servis yayınlanmaya hazır hale getirilir.

<servicename="Services.ServiceImpl "behaviorConfiguration="ServiceBehaviour">
       <endpointaddress=""binding="webHttpBinding"contract="Services.IServiceImpl "behaviorConfiguration="web">
        </endpoint>
     </service>xm

     

Endpoint ile servisi hangi adres, protokol ve kontrat ile yayınlayacağımızı belirtmekteyiz.  Bu kullanım hizmet sınıfını birden fazla kontrat ile farklı farklı adres ve protokollerle yayınlayabilme olanağı sağlamaktadır. 

Windows Phone Uygulamasında İnternet Kontrol Etme

Windows Phone’da içerisinde internet kullanımı gerektiren bir uygulama geliştirdiğimizde uygulama içerisinde sürekli olarak internet var mı ?  yok mu ? diye kontrol etmek zorundayız. İster uygulama ilk açıldığında Page_Load anında bunu yapabilir istersekde uygulama içerisinde bir Buton’a tıklanıldığında.Aşağıda internet olduğunda True olmadığında False değer dönen CheckConnection() metod’unu uygulamalarda kullanabiliriz.

publicbool CheckConnection()

{

    if ((Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType ==        

 Microsoft.Phone.Net.NetworkInformation.NetworkInterfaceType.None))

           return false;       

        else    

           return true;      

}

Windows Phone Splash Screen Ekleme

Windows Phone projelerinde uygulama açılırken SplashScreen dediğimiz açılış sayfalarını thread kullanarak ekleyebiliyoruz. Bunun için bir adet WindowsPhone projesi oluşturuyoruz ve içerisine MainPage.xaml sayfasından başka 1 adet adı SplashScreen olan portrait page ekliyoruz ve sonrasında aşağıdaki kodları sayfalarımıza ekliyoruz.

SplashScreen.xaml Design Sayfası

<Grid x:Name="LayoutRoot" Background="White" Width="480" Height="900">

<ProgressBar HorizontalAlignment="Left" Margin="49,712,0,149" Name="progressBar1" Width="383" />

<Image Height="666" HorizontalAlignment="Left" Margin="0,0,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="480" Source="SplashScreenImage.png" />

<TextBlock HorizontalAlignment="Left" Margin="151,671,0,193" Name="textBlock1" Text="Lütfen Bekleyiniz..." Width="173" Foreground="Black" FontSize="22" />

</Grid>

SplashScreen.xaml Code Behind

publicpartialclassSplashScreen : PhoneApplicationPage

{

public SplashScreen()

{

InitializeComponent();

this.progressBar1.IsIndeterminate = true//Progressbar’ın çalışmasını söyledik

}

}

 

MainPage.xaml Code Behind

//Metod içerisinde kullanmak için Global değişkenleri tanımlıyoruz

privatePopup popup;

privateBackgroundWorker backroungWorker;

public PrayerTime()

{

InitializeComponent();

ShowSplash(); //SplashScreen metodunu çağırıyoruz

}

privatevoid ShowSplash()

{

this.popup = newPopup();

this.popup.Child = newSplashScreen();

this.popup.IsOpen = true;

StartLoadingData();

}

 

privatevoid StartLoadingData()

{

backroungWorker = newBackgroundWorker();

backroungWorker.DoWork += newDoWorkEventHandler(backroungWorker_DoWork);

backroungWorker.RunWorkerCompleted += newRunWorkerCompletedEventHandler(backroungWorker_RunWorkerCompleted);

backroungWorker.RunWorkerAsync();

}

 

 

void backroungWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

{

this.Dispatcher.BeginInvoke(() =>

{

this.popup.IsOpen = false;

 

}

);

 

}

 

void backroungWorker_DoWork(object sender, DoWorkEventArgs e)

{

Thread.Sleep(1000); //Splash screen sayfasının ne kadar süre ile ekranda kalacağını belirtiyoruz

}

 

Kodları hatasız yazdıktan sonra uygulamamızı çalıştırdığımızda ekran çıktısı aşağıdaki gibi olacaktır.

 

Windows Phone LightBox(Canvas) Kullanımı

 

Web’de alışık olduğumuz Lightbox’ları Windows Phone’da da bi nevi yapmak mümkün. Nasıl mı ? Canvas kontrolünü kullanarak.

İlk olarka yeni bir WP projesi açalım ve MainPage.xaml design sayfası içerisindeki Grid’in içine 1 adet Canvas kontrolü atalım Canvas tagleri içine StackPanel ve StackPanel’inde içine istediğimiz kontrolleri atalım  TextBox,TextBlock, Buton etc. Canvas’ın Visibility=" "  özelliğini kullanarak tıpkı bir Lightbox gibi çalışmasını sağlayabilriz. Ekranda görünsün istediğimizde Visibility="Visible"diyebilir, görünmesin istediğimizde Visibility=" Collapsed"yaparak ekrandan kaybolmasını sağlayabiliriz.

Yaklaşık 3 ay önce geliştirdiğim ve şuan markette bulunan SonDepremler uygulaması için kullandığım Canvas kontrolünün kodları aşağıda olduğu gibidir.

LightBox’ın ekranda görünmesi için ekranda bulunana herhangi bir kontrol’ün event’i tetiklendiğinde tek yapmanız gereken metod içerisine canvasfiltre.Vi ibility=Visible; demek

Ekrandan kaybolması için ise Canvas içerisinde bulunan canvasclose butonunun Click eventinin metoduna canvasfiltre.Visibility=Visibility.Collapsed; demek yeterli olacaktır.

Mainpage.xaml Design Sayfası

 

<Canvas Canvas.ZIndex="1" Visibility="Visible" x:Name="canvasfiltre" Width="400" Background="White" Height="480">
 
                <StackPanel Width="400">
                    <HyperlinkButton x:Name="canvasclose" Foreground="#d64300" HorizontalAlignment="Right" Content="X" FontWeight="Bold" Canvas.Left="400" Canvas.Top="10" Click="canvasclose_Click" />
                    <StackPanel Orientation="Vertical">
                        <TextBlock TextWrapping="Wrap" FontSize="45" FontWeight="Bold" Foreground="#d64300" VerticalAlignment="Top" Text="Sırala" HorizontalAlignment="Center" TextDecorations="Underline"/>
                        <CheckBox IsChecked="true" Name="chctumdepremler" FontWeight="Bold" FontSize="26" Foreground="#d64300" Background="Red" Content="Tüm Depremler" Click="chctumdepremler_Click"/>
                        <CheckBox Name="chc_3alti" HorizontalAlignment="Left" Content="Şiddeti 3'ten az olanlar" FontSize="26" Background="Red" Foreground="#d64300" FontWeight="Bold" Click="chc_3alti_Click"/>
                        <CheckBox Name="chc_3ustu" HorizontalAlignment="Left" Content="Şiddeti 3'ten fazla olanlar" Background="Red" FontSize="26" Foreground="#d64300" FontWeight="Bold" Click="chc_3ustu_Click"/>
                        <CheckBox Name="chc_5alti" HorizontalAlignment="Left" Content="Şiddeti 5'ten az olanlar" FontSize="26" Background="Red" Foreground="#d64300" FontWeight="Bold" Click="chc_5alti_Click"/>
                        <CheckBox Name="chc_5ustu" HorizontalAlignment="Left" Content="Şiddeti 5'ten fazla olanlar" Background="Red" FontSize="26" Foreground="#d64300" FontWeight="Bold" Click="chc_5ustu_Click"/>
                    </StackPanel>
                </StackPanel>
            </Canvas>