Nedir bu WCF?

WCF ( Windows Communication Foundation) .net 3.0 ile gelen yeni teknolojiler arasında yerini almıştır.Aslında web servislerin dahada gelişmiş halidir.Farklı hizmetleri tek çatı altında toplamıştır.Farklı pproblemlere farklı yollardan  çözüm sağlamaktansa tek bir teknoloji ile hepsine çözüm bulunabilir.WCF burada bize yardımcı olmaktadır.

Resimden de anlaşıldığı üzere farklı teknolojileri bir taçı altında toplayım daha fazla hizmet verebilmektedir.

WCF ayrıca Service Oriented mimarisine (SOA) uymaktadır.Aynı zamanda bir servis çok fazla endpoint barındırabilir.Bu sayede servis çok daha esnek yapıda olur.

WCF’in ABC si o da ne ki?

WCF’in dış dünyaya olan bağlantısını endpoint tanımlamaları sağlar.Bu endpoint bilgileri Aşağıda belirttiğimiz 3 tanımlamayı barındırır.Bunlar Address(Adres), Bindings(Bağlayıcılar), Contract(Sözleşme).

1-Address

Basitçe servisin adresi diyebiliriz.Burada aslında servise nasıl ulaşacağımızı belirler.Benzersizdir.Genelde adres formatı şu şekildedir.

“Protokol://<MakinaAdı>[:port]/Path”

Burada protokoldan kasıt bu servise hangi yolla ulaşacağındır.

  • HTTP
  • TCP
  • MSMQ
  • Pipe

gibi…

Örnek adresler;

http://localhost:8080/ConvertTemperature

net.tcp://localhost/ ConvertTemperature

2-Binding

Mesajın nasıl gönderileceği bilgisini içerir diyebiliriz.Servise nasıl iletişim kuracağımız tanımlanır.Tanımlı Wcf Binding çeşitleri aşağıdaki gibidir.

Binding Konfigürasyon Güvenlik Default Session Transaction Çift Yönlü Mesajlaşma(Duplex)
basicHttpBinding Basic Profile 1.1 None Yok
wsHttpBinding WS Message Optional Var
wsDualHttpBinding WS Message Var Var Var

wsFederationHttpBinding

WS-Federation Message Var Var Yok
netTcpBinding .NET Transport Optional Var Var
netNamedPipeBinding .NET Transport Var Var Var
netMsmqBinding .NET Transport Var Var Yok
netPeerTcpBinding Peer Transport Var
msmqIntegrationBinding MSMQ Transport Var Var

 

Hatırlayacağımız üzere WCF birden fazla endpointi destekler bu sayede farklı transportlar kullanılabilir.(HTTP,TCP,MSMQ..)

3-Contract

Mesajın  neler içerdiğini belirtir diyebiliriz.Nesnenin ne olduğunu belirtir.(Service Contract,DataContract,FaultContract,MessageContract)

 

Örnek Uygulama

İlk adım olarak Visual Studio 2010’da  bir tane Wcf Service Library Projesi açalım.Burada Celcius,Fahrenheit dönüşümlerini getiren bir örnek seçtim.

Visual Studio 10’da bir tane Wcf Service Library oluşturalım.Öncelik olarak bir tane ServiceContract belirlememiz gerekmektedir.Bu bir interface’tir.Burada dış dünyaya açılacak metotlar annotation ile belirlenir.Service Contract olarak belirlenen Interface sınıfının özelleklerini belirlemek için ServiceContract bi kaç parametre alır.Bunlar; CallbackContract,ConfigurationName,Name,NameSpace,HasProtectionLevel,ProtectionLevel,SessionMode’tur.İlerki makalelerde bunları kullandıkça anlatıyor olacağım.Aynı zamanda OperationContract ında özelliklerinin belirleyeceği özellikleri mevcuttur.

ServiceContract aşağıdaki gibidir.

    [ServiceContract]
    public interface IWeather
    {
        [OperationContract]
        double CelciusToFahrenheit(double Celcius);

        [OperationContract]
        double FahrenheitToCelcius(double Fahrenheit);
    }

Sonrasında oluşturduğumuz Servisimizi implement ettiğimizde metodların içini dolduralım.

    public class Weather : IWeather
    {

        public double CelciusToFahrenheit(double Celcius)
        {
            return Celcius * (1.8) + 32;
        }

        public double FahrenheitToCelcius(double Fahrenheit)
        {
            return (Fahrenheit - 32) / 1.8;
        }
    }

Servis Contractımız hazırdır.Şimdi bunu host eden bir tane Console Uygulaması yazalım.Servisin gerekli tanımlamalarını app.config dosyasına yazıyoruz.Benim tanımlamalarım aşağıdaki gibidir.

    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="WeatherBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="WeatherBehavior" name="WCFSample.Weather">
                <endpoint address="http://localhost:4590/Weather" binding="basicHttpBinding"
                    bindingConfiguration="" contract="WCFSample.IWeather" />
            </service>
        </services>
    </system.serviceModel>

Eğer ki servisin metadatasını paylaşmak isterseniz burada bir tane behavior tanımlamak gerekir.Daha sonra bunu servisin behaviour configuration da bunu belirtmek gerekir.Ben xml den yazdım.Ama app.confige sağ tıklayarak Edit WCF Configuration diyerek tanımlamaları orda da yazabilirsiniz.Servisin endpoint adresi olarak

http://localhost:4590/Weather

verdim.

Sıra geldi hostu ayarlayıp çalıştırıp servisi aktif hale getirelim.

Uri uri=new Uri("http://localhost:4590/Weather");

            ServiceHost host = new ServiceHost(typeof(Weather), uri);
            host.Opened += (s, e) =>
                {
                    Console.WriteLine("Servis Açıldı");
                };

            host.Closed += (s, e) =>
                {
                    Console.WriteLine("Servis Kapandı");
                };

            host.Open();
            Console.ReadLine();
            host.Close();

Bu da tamamdır.Önce Host uygulamamızı çalıştırıp linki browsera yazıp servisin çalışıp çalışmadığını test edelim.

Şimdi client uygulamamızı yazalım.

NOT:Normalde linki siz uygulamalarınızda References’a sağ tıklayarak Add Service Referance diyerek ekleyip Proxy’yi Visual Studio’ya generate ettirebilirsiniz ama svcutil.exe kullanılarakta Command Prompt ‘tan bu Proxy generate edilebilir.

Şu an C nin altında Proxy nesnemiz bulunmaktadır.Yine bir tane Console uygulaması açıp Nesnemizi uygulamamızın  içine ekleyelim.

Sonrasında kullanıp host uygulaması açıkken client uygulamamızı çalıştıralım.

WeatherClient client = new WeatherClient();
Console.WriteLine(client.CelciusToFahrenheit(10).ToString());
client.Close();
Console.ReadLine();

Sonuç

Kaynaklar:

-MSDN

-Burak Selim Senyurt WCF Makaleleri(Apress’in kitaplarını anlamamda büyük fayda sağlamıştır.Teşekkürler)

-Apress

 

Başarılar Dilerim.

What is WCF
What is WCF
WCFSample.rar
Version: 1.0
61.1 KiB
114 Downloads
Ayrıntılar...