﻿
{"id":7190,"date":"2018-03-22T03:09:27","date_gmt":"2018-03-22T03:09:27","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=7190"},"modified":"2018-03-23T23:42:40","modified_gmt":"2018-03-23T23:42:40","slug":"windows-communication-foundationwcf-nedir-ve-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/windows-communication-foundationwcf-nedir-ve-nasil-kullanilir\/","title":{"rendered":"Windows Communication Foundation(WCF) Nedir ve Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Yaz\u0131l\u0131m d\u00fcnyas\u0131nda ayn\u0131 anda birden fazla sistem \u00fczerinde \u00e7al\u0131\u015fan da\u011f\u0131t\u0131k uygulamalar s\u00f6z konusu oldu\u011funda bu uygulamalar\u0131n ileti\u015fim altyap\u0131s\u0131n\u0131 WCF katman\u0131nda belirleyebilmekte ve bu i\u015flemi di\u011fer(.Net Remoting, XML Web Servisleri vs.) gibi teknolojilere nazaran daha kapsaml\u0131 ve h\u0131zl\u0131 icra edebilmekteyiz.<\/p>\n<p>WCF, az kod yazarak bir\u00e7ok i\u015flevi h\u0131zl\u0131 bir \u015fekilde ger\u00e7ekle\u015ftirmemizi sa\u011flayan ve bir ba\u015fka deyi\u015fle .NET teknolojisinde her\u015feyi her\u015feye ba\u011flamaya yarayan bir teknolojidir. WCF&#8217;in en b\u00fcy\u00fck getirisi, servis i\u00e7ine i\u015fledi\u011finiz i\u015f mant\u0131\u011f\u0131n\u0131n d\u0131\u015fa a\u00e7arken g\u00f6z \u00f6n\u00fcne alaca\u011f\u0131n\u0131z y\u00f6ntemlerden ba\u011f\u0131ms\u0131z olmas\u0131d\u0131r. Yani demem o ki, bu g\u00fcn HTTP \u00fczerinden \u00e7al\u0131\u015fan bir port yar\u0131n ufak bir de\u011fi\u015fiklikle TCP ile \u00e7al\u0131\u015ft\u0131r\u0131labilir. Bu tarz ayarlar implementasyon sonras\u0131 sa\u011flanabilmektedir. <\/p>\n<p><strong><em>Peki hoca! Bu anlatt\u0131klar\u0131n\u0131 Web Service ile de yapamaz m\u0131y\u0131z?<\/em><\/strong> diye sordu\u011funuzu duyar gibiyim. Bu sorunuza k\u0131smen cevab\u0131n\u0131 vermek daha do\u011fru olacakt\u0131r. \u00c7\u00fcnk\u00fc Web Service yukar\u0131da bahsetti\u011fim gibi t\u00fcm portlar\u0131 kullanamamakta sade ve sadece HTTP portu \u00fczerinden i\u015flem yapmaktad\u0131r. Ama WCF b\u00f6yle mi? Hemen hemen t\u00fcm portlar\u0131 desteklemektedir. Vee farklar sadece bu kadar m\u0131? Tabi ki de hay\u0131r. Web Service ile WCF aras\u0131ndaki di\u011fer farklar\u0131da a\u015fa\u011f\u0131da ele alal\u0131m;<\/p>\n<ul>\n<li>Web Serviceler sadece IIS \u00fczerinde host edilebilirler. WCF ise IIS, WAS, Console Application, Windows NT Services \u00fczerinde host edilebilmektedir.<\/li>\n<li>Web Servicelerde g\u00fcvenlik olduk\u00e7a s\u0131n\u0131rl\u0131d\u0131r. Kimlik do\u011frulama ve yetkilendirme i\u015flemleri IIS kullan\u0131larak yap\u0131l\u0131r. WCF ise her bir protokol i\u00e7in ayr\u0131 bir g\u00fcvenlik hizmeti sa\u011flar.<\/li>\n<\/ul>\n<p>Anlayaca\u011f\u0131n\u0131z WCF, Web Servicelerden daha kapsaml\u0131d\u0131r.<\/p>\n<p>WCF&#8217;i anlamak i\u00e7in WCF&#8217;in ABC&#8217;sini anlamak laz\u0131md\u0131r. <strong><em>Peki nedir bu ABC?<\/em><\/strong><\/p>\n<ul>\n<li><strong>A<\/strong><em>ddress(Adres)<\/em><br \/>\nWCF ileti\u015fim katman\u0131n\u0131 kullanacak uygulamalar\u0131n do\u011fru kaynakla irtibata girebilmesi i\u00e7in adres bilgisidir.\n<\/li>\n<li><strong>B<\/strong><em>inding(Ba\u011flay\u0131c\u0131)<\/em><br \/>\n\u0130leti\u015fim protokol\u00fcd\u00fcr.\n<\/li>\n<li><strong>C<\/strong><em>ontract(Kontrat)<\/em><br \/>\n\u0130leti\u015fim katman\u0131na ba\u011fl\u0131 uygulamalar\u0131n, WCF \u00fczerinde hangi yap\u0131lara yahut fonksiyonalitelere eri\u015febilece\u011fini belirleyen bir kontratt\u0131r.\n<\/li>\n<\/ul>\n<p>Yani bu ABC k\u0131saca, da\u011f\u0131t\u0131k uygulamalar\u0131n ve WCF&#8217;in s\u00fcre\u00e7teki response ve request trafi\u011findeki &#8220;Nereye?(Address)&#8221;, &#8220;Nas\u0131l(Binding)&#8221; ve &#8220;Neyi(Contract) sorular\u0131na yan\u0131tlar\u0131 vermektedir.<\/p>\n<p>\u015eimdi bir WCF uygulamas\u0131n\u0131 pratikte ele alal\u0131m. Visual Studio ortam\u0131nda herhangi bir(Asp.NET, Windows Application yahut Console Application) proje a\u00e7al\u0131m. Ard\u0131ndan bir adette WCF Service Application olu\u015ftural\u0131m.<\/p>\n<p>\u00d6rne\u011fimizi hayali personeller \u00fczerinden seyredece\u011fiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Personel\r\n    {\r\n        public string Adi { get; set; }\r\n        public string SoyAdi { get; set; }\r\n        public bool CalismaDurumu { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;ServiceContract]\r\n    public interface IPersonelService\r\n    {\r\n        &#x5B;OperationContract]\r\n        Personel PersonelGetir();\r\n        &#x5B;OperationContract]\r\n        bool PersonelCalisiyormu();\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da bir adet service interfacei tan\u0131mlanm\u0131\u015ft\u0131r. Bu aray\u00fcz sayesinde WCF d\u0131\u015fa a\u00e7\u0131ld\u0131\u011f\u0131 vakit hangi yap\u0131lar\u0131n eri\u015filebilir oldu\u011funu teminat alt\u0131na alm\u0131\u015f bulunmaktay\u0131z. <strong><em>ServiceContract<\/em><\/strong> attributeu ile i\u015faretlenen s\u0131n\u0131f servisi belirtmektedir. <strong><em>OperationContract<\/em><\/strong> attributeu ise servis i\u00e7inde d\u0131\u015far\u0131ya a\u00e7\u0131lacak olan operasyonel metotlar\u0131 temsil etmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PersonelService : IPersonelService\r\n    {\r\n        public bool PersonelCalisiyormu() =&gt; PersonelGetir().CalismaDurumu;\r\n        public Personel PersonelGetir() =&gt; new Personel\r\n        {\r\n            Adi = &quot;Gen\u00e7ay&quot;,\r\n            SoyAdi = &quot;Y\u0131ld\u0131z&quot;,\r\n            CalismaDurumu = true\r\n        };\r\n    }\r\n<\/pre>\n<p>&#8220;Contract&#8221; olan IPersonelService isimli interfacei implamente eden ve as\u0131l(concrete) servis nesnemiz olan &#8220;PersonelService&#8221; s\u0131n\u0131f\u0131 i\u015flevine haz\u0131rd\u0131r.<\/p>\n<p>&#8220;.svc&#8221; uzant\u0131l\u0131(<em>ki bu bende PersonelService.svc dosyas\u0131d\u0131r<\/em>) dosyaya sa\u011f t\u0131klayarak &#8220;View in Browser&#8221; sekmesi \u00fczerinden ilgili servisimizin adresini elde ediyoruz.<\/p>\n<p>Projemizi derliyoruz. Ard\u0131ndan elde edilen linki olu\u015fturmu\u015f oldu\u011fumuz di\u011fer platformumuzun referans\u0131na sa\u011f t\u0131klayarak &#8220;Add Service Referance&#8221; sekmesini se\u00e7iyoruz ve kar\u015f\u0131m\u0131za gelen pencerede Address k\u0131sm\u0131na ilgili adresi yaz\u0131p, namespace k\u0131sm\u0131na bir isim belirterek(<em>ben PersonelService yazm\u0131\u015f bulunmaktay\u0131m<\/em>) &#8220;Go&#8221; ve ard\u0131ndan &#8220;Ok&#8221; diyerek servisimizi projemize dahil etmi\u015f oluyoruz.<\/p>\n<p>Art\u0131k servisimizi projemizde kullanabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            PersonelServiceClient client = new PersonelServiceClient();\r\n<\/pre>\n<p>Service derlendi\u011fi vakit otomatik olarak client nesnesi tan\u0131mlam\u0131\u015ft\u0131r. Bu nesne \u00fczerinden operasyonlarda dahil \u00e7o\u011fu i\u015flemleri ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<p>Bu s\u00fcre\u00e7te arada ta\u015f\u0131nacak classlar\u0131da tan\u0131mlamak istiyorsak ki burada Personel s\u0131n\u0131f\u0131 bunun i\u00e7in bir \u00f6rnek olabilir, o zaman DataContract ve DataMember attributelar\u0131 devreye girmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;DataContract]\r\n    public class Personel\r\n    {\r\n        &#x5B;DataMember]\r\n        public string Adi { get; set; }\r\n        &#x5B;DataMember]\r\n        public string SoyAdi { get; set; }\r\n        &#x5B;DataMember]\r\n        public bool CalismaDurumu { get; set; }\r\n    }\r\n<\/pre>\n<p>Burada <strong><em>DataContract<\/em><\/strong> ile Personel s\u0131n\u0131f\u0131n\u0131n WCF&#8217;e ba\u011flanan uygulamalardan eri\u015filebilir oldu\u011funu belirtiyoruz. <strong><em>DataMember<\/em><\/strong> ise benzer mant\u0131kla uygulamalar\u0131n eri\u015febilece\u011fi propertyleri i\u015faretlememizi sa\u011flamaktad\u0131r.<\/p>\n<p>Temelde bu kadar basit lakin detayda m\u00fckemmel i\u015fler yapabilen bir servistir WCF.<\/p>\n<p>De\u011ferli arkada\u015flar.<br \/>\nMakaleyi sonland\u0131rmadan bir hususa de\u011finmek istiyorum. Biliyorsunuz ki, bu g\u00fcne kadar hi\u00e7bir makalemde bu kadar h\u0131zl\u0131 ve gerekti\u011fi halde resimsiz bir i\u00e7erik payla\u015fm\u0131\u015f bulunmamaktay\u0131m. Bu makalede beni mazur g\u00f6r\u00fcn\u00fcz. <\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Yaz\u0131l\u0131m d\u00fcnyas\u0131nda ayn\u0131 anda birden fazla sistem \u00fczerinde \u00e7al\u0131\u015fan da\u011f\u0131t\u0131k uygulamalar s\u00f6z konusu oldu\u011funda bu uygulamalar\u0131n ileti\u015fim altyap\u0131s\u0131n\u0131 WCF katman\u0131nda belirleyebilmekte ve bu i\u015flemi di\u011fer(.Net Remoting, XML Web Servisleri vs.) gibi teknolojilere nazaran&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2122],"tags":[2125,1498,2128,2129,2127,2126,2124,2123],"class_list":["post-7190","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wcf","tag-adress","tag-binding","tag-datacontract","tag-datamember","tag-operationcontract","tag-servicecontract","tag-wcf","tag-windows-communication-foundation"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=7190"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/7190\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=7190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=7190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=7190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}