{"id":8503,"date":"2010-12-02T23:18:47","date_gmt":"2010-12-02T21:18:47","guid":{"rendered":"https:\/\/fatihboy.com\/post\/wcf-giris"},"modified":"2010-12-02T23:18:47","modified_gmt":"2010-12-02T21:18:47","slug":"wcf-giris","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/wcf-giris\/","title":{"rendered":"WCF&#8217;e Giri\u015f"},"content":{"rendered":"<p>   .Net framework 3.0 ile hayat\u0131m\u0131z\u0131n bir par\u00e7as\u0131 olan Windows Communication Foundation (<em>WCF<\/em>) hakk\u0131nda yazmay\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn makalelerden bu ilkinde \u00f6ncelikle birlikte WCF hizmetlerine \u0131s\u0131nmam\u0131z\u0131 hedefliyorum, hedefim sizleri fazla da yormadan kolayca nas\u0131l bir WCF hizmeti olu\u015fturabilece\u011finizi payla\u015fmak.<\/p>\n\n\n\n<p>   En temel anlat\u0131m\u0131yla Windows Communication Foundation, .Net framework 3.0\u2019\u0131n \u00e7\u0131kart\u0131lmas\u0131yla birlikte hayat\u0131m\u0131za giren ve .Net framework ile yazd\u0131\u011f\u0131n\u0131z uygulamalar\u0131n ileti\u015fim katman\u0131 olmay\u0131 ama\u00e7 edinen bir k\u00fct\u00fcphanedir. .Net Remoting, XML Web Servisleri, MSMQ, Net pipe, tcp\/ip gibi pek \u00e7ok farkl\u0131 y\u00f6ntemi tek bir \u00e7at\u0131 alt\u0131nda toplad\u0131\u011f\u0131n\u0131 bilmek bile ne denli g\u00fc\u00e7l\u00fc oldu\u011funu anlaman\u0131za yetecektir.<\/p>\n\n\n\n<p>  WCF hizmetleriyle \u00e7al\u0131\u015facaksan\u0131z \u00f6ncelikle i\u015fin <strong>ABC<\/strong>\u2019sini \u00f6\u011frenmelisiniz. WCF hakk\u0131nda okuyabilece\u011finiz pek \u00e7ok farkl\u0131 giri\u015f makalesinde de duyaca\u011f\u0131n\u0131z bu <em>ABC<\/em> benzetmesi, bir \u015faka olmaktan \u00f6te ger\u00e7ekten de WCF\u2019in ana bile\u015fenlerini anlatan bir k\u0131saltmad\u0131r. Peki bu k\u0131saltma neyi ifade etmekte?<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li> <strong>A<\/strong>ddress (<em>Adres<\/em>) : E\u011fer insanlar\u0131n\/uygulamalar\u0131n kullanaca\u011f\u0131 bir hizmet tan\u0131m\u0131 yap\u0131yorsan\u0131z tabiki bu hizmetin belirli bir adresi olmal\u0131, ayn\u0131 i\u015f yerlerinin\/ma\u011fazalar\u0131n oldu\u011fu gibi<em>.<\/em> <strong>Hizmetim intranet\/internet \u00fczerinde hangi adreste bulunmakta?<\/strong> \u0130lk harfimiz <strong>A<\/strong> bunu temsil etmektedir. <\/li><li> <strong>B<\/strong>inding (<em>Ba\u011flay\u0131c\u0131<\/em>) : Her bir WCF hizmetinde mutlaka yay\u0131nlad\u0131\u011f\u0131n\u0131z hizmete veri g\u00f6ndermek ya da hizmetten veri almak i\u00e7in uygulamalarca kullan\u0131lacak olan bir ileti\u015fim protokol\u00fcn\u00fcz olmal\u0131d\u0131r. <strong>Hizmetimle ne \u015fekilde konu\u015fulacak?<\/strong> ikinci harfimiz <strong>B<\/strong> bunu temsil etmektedir. <\/li><li> <strong>C<\/strong>ontract (<em>Kontrat<\/em>) : Yay\u0131nlad\u0131\u011f\u0131n\u0131z her bir WCF hizmetinde kullan\u0131c\u0131lar\u0131n\u0131za sunmay\u0131 tahah\u00fct edece\u011finiz bir tak\u0131m fonksyonaliteler bulanacakt\u0131r. Ger\u00e7ek hayatta oldu\u011fu gibi sizin ve m\u00fc\u015fterilerinizin sorumluluklar\u0131n\u0131n tan\u0131mland\u0131\u011f\u0131 ve taraflarca \u00fczerinde anla\u015f\u0131lan bir kontrat bulunmal\u0131d\u0131r. WCF hizmetinizde tan\u0131mlad\u0131\u011f\u0131n\u0131z bir kontratla, sundu\u011funuz fonksiyonalitelerinizde kullan\u0131c\u0131lardan bekledi\u011finiz de\u011ferler ile bu de\u011ferler neticesinde kullan\u0131c\u0131ya vermeyi tahah\u00fct etti\u011finiz sonu\u00e7lar\u0131 belirtebilirsiniz. <strong>Hizmetim kullan\u0131c\u0131lara hangi fonksiyonaliteleri sunacak?<\/strong> \u00dc\u00e7\u00fcnc\u00fc ve son harfimiz <strong>C<\/strong> bunu temsil etmektedir. <\/li><\/ul>\n\n\n\n<p>   WCF\u2019in ABC\u2019sini \u00f6zetlemek gerekirse; bir wcf hizmeti tan\u0131m\u0131nda 3 temel soru yan\u0131tlanmal\u0131; nerede? (<em>Adres<\/em>), nas\u0131l? (<em>Ba\u011flay\u0131c\u0131<\/em>), ne? (<em>Kontrat<\/em>)<\/p>\n\n\n\n<p>   Olu\u015fturaca\u011f\u0131n\u0131z bir WCF hizmeti, arkaplanda hangi y\u00f6ntemi\/teknolojiyi kullan\u0131yor olursa olsun mutlaka ve mutlaka yukar\u0131da s\u0131ralad\u0131\u011f\u0131m bu \u00fc\u00e7 temel bile\u015fene sahip olmal\u0131d\u0131r. \u0130sterseniz \u00f6rnek bir hizmet \u00fczerinde bu \u00fc\u00e7 kavram\u0131 tan\u0131yal\u0131m;<\/p>\n\n\n\n<p>   Yeni bir WCF hizmeti tan\u0131mlarken ilk \u00f6nce sunmay\u0131 hedefledi\u011finiz fonsiyonaliteleri netle\u015ftirmeli ve bir kontrat ile bunu duyurmal\u0131s\u0131n\u0131z. Sunumlar\u0131ma kat\u0131ld\u0131ysan\u0131z bunu bende s\u0131k s\u0131k duymu\u015fsunuzdur; C# d\u00fcnyas\u0131nda ne zaman bir kontrattan bahsetsem akl\u0131n\u0131za ilk olarak <strong>aray\u00fcz<\/strong> (<em>interface<\/em>) gelmelidir. A\u015fa\u011f\u0131da, yaz\u0131m\u0131n devam\u0131nda birlikte olu\u015fturaca\u011f\u0131m\u0131z ilk WCF hizmetimize ait \u00f6rnek bir kontrat bulabilirsiniz.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public interface IOrnekHizmet {\n   int Say();\n}<\/pre>\n\n\n\n<p>   G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi \u00e7ok basit ve sade bir kontrat\u0131m\u0131z var. Her \u00e7a\u011fr\u0131da, hizmet i\u00e7erisinde tutulan sayac\u0131n de\u011ferini bir artt\u0131racak olan bir fonksiyonalite sunmaktay\u0131m. Kontrat\u0131m\u0131 bir WCF hizmetinde kullanabilmek i\u00e7in ufak bir iki dokunu\u015f yapmal\u0131y\u0131m;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li> \u00d6ncelikle kontrat\u0131m\u0131n bir hizmette kullan\u0131laca\u011f\u0131n\u0131 belirtmeliyim. Bunun i\u00e7in s\u0131n\u0131f\u0131m\u0131n hemen \u00fcst\u00fcnde bir <strong>ServiceContract<\/strong> \u00f6zniteli\u011fi tan\u0131mlamam yeterli. <\/li><li> Bu ad\u0131m ard\u0131ndan, sundu\u011fum fonsiyonaliteyi belirtmeliyim. Bunu da benzer \u015fekilde ilgili fonksiyonun \u00fczerine <strong>OperationContract<\/strong> \u00f6zniteli\u011fini koyarak kolayl\u0131kla yapabilirim. <\/li><\/ul>\n\n\n\n<p>   Bu iki \u00f6zniteli\u011finde kodumuza eklenmesi ard\u0131ndan aray\u00fcz\u00fcm\u00fcz a\u015fa\u011f\u0131daki \u015fekli alacakt\u0131r;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[ServiceContract(Namespace = \"https:\/\/fatihboy.com\/WCFOrnekleri\")]\npublic interface IOrnekHizmet {\n   [OperationContract]\n   int Say();\n}<\/pre>\n\n\n\n<p>   ServiceContract \u00f6zniteli\u011finde <strong>Namespace<\/strong> parametresi ile belirtti\u011fimiz isim uzay\u0131 bize kontrat\u0131n neresi i\u00e7in tan\u0131ml\u0131 oldu\u011funu belirtecektir. Bu sayede farkl\u0131 yaz\u0131l\u0131m geli\u015ftiricilerce yaz\u0131lm\u0131\u015f olan birbirinden ba\u011f\u0131ms\u0131z WCF hizmetlerinin, ayn\u0131 isme dahi sahip olsa, birbirinden ay\u0131rt edilebilmesi sa\u011flanmaktad\u0131r. Her ne kadar opsiyonel olan bu parametreye bir de\u011fer verilmemesi durumunda framework varsay\u0131lan olarak <a title=\"http:\/\/tempuri.org\/\" href=\"http:\/\/tempuri.org\/\">http:\/\/tempuri.org\/<\/a> de\u011ferini kullansa da, tavsiyem mutlaka kendinize \u00f6zg\u00fc bir de\u011fer vermeniz olacakt\u0131r. Tamamen farazi olan ve varl\u0131\u011f\u0131 uygulamalarca kontrol edilmeyen bu adres, kimi kullan\u0131mlarda hizmete ait dok\u00fcmanlar\u0131n bulundu\u011fu ger\u00e7ek bir adreste olabilmekte. Bu durumda kullan\u0131c\u0131 h\u0131zl\u0131ca hizmet dok\u00fcmantasyonuna da ula\u015fabilecektir. \u00d6rne\u011fin; yukar\u0131daki kod par\u00e7ac\u0131\u011f\u0131 i\u00e7in <em>https:\/\/fatihboy.com\/WCFOrnekleri\/<\/em> adresine basit bir dok\u00fcmantasyon eklenerek hizmet anlat\u0131labilir.<\/p>\n\n\n\n<p>  Kontrat\u0131n tan\u0131mlanmas\u0131 ard\u0131ndan, as\u0131l i\u015fi yapacak olan hizmetimizi tan\u0131mlamal\u0131 ve kontrat do\u011frultusunda gerekli tan\u0131mlamalar\u0131m\u0131z\u0131 yapmal\u0131y\u0131z. A\u015fa\u011f\u0131da IOrnekHizmet  i\u00e7in \u00f6rnek bir hizmet tan\u0131m\u0131n\u0131 bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">internal class OrnekHizmet : IOrnekHizmet {\n   private int sayac = 0;\n\n   #region IOrnekHizmet \u00dcyeleri\n\n   public int Say() {\n      return ++sayac;\n   }\n\n   #endregion\n}<\/pre>\n\n\n\n<p>   G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi hizmetim sadece her Say denildi\u011finde i\u00e7eride tuttu\u011fu \u00f6zel de\u011fi\u015fkenin (<em>sayac<\/em>) de\u011ferini bir artt\u0131rarak istemciye d\u00f6nmektedir. OrnekHizmet s\u0131n\u0131f\u0131 i\u00e7erisinde WCF hizmeti ile ilgili herhangi bir tan\u0131mlama bulunmad\u0131\u011f\u0131 dikkatinizi \u00e7ekmi\u015ftir. Gerekli olan t\u00fcm tan\u0131mlamalar\u0131n aray\u00fcz\u00fcm\u00fcn \u00fczerinde bulunmas\u0131 nedeniyle b\u00f6yle bir ihtiya\u00e7 bulunmamaktad\u0131r. Bunun avantajlar\u0131;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li> Ayn\u0131 kontrata uyan (<em>ayn\u0131<\/em> <em>aray\u00fcz\u00fc uygulayan<\/em>) birden fazla hizmet i\u00e7in ortak de\u011fi\u015fiklikleri bir kez yapabilir <\/li><li> Bir hizmet s\u0131n\u0131f\u0131 farkl\u0131 aray\u00fczleri, <em>yani farkl\u0131 hizmet tan\u0131mlar\u0131n\u0131\/kontratlar\u0131n\u0131<\/em>, destekleyebilir. Bu hizmet tan\u0131mlar\u0131 da farkl\u0131 farkl\u0131 adres ve protokollerden kullan\u0131c\u0131lara sunulabilir <\/li><\/ul>\n\n\n\n<p>   \u0130leri d\u00fczey kullan\u0131mlarda hizmet s\u0131n\u0131f\u0131 \u00fczerinde de ek tan\u0131mlamalar yap\u0131labilmektedir, bu makalenin konusu olmamas\u0131 nedeniyle detay\u0131na girmemekle birlikte bu konuya ilerleyen makalelerimde de\u011finmeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p>   Hizmetimizin kontrat\u0131n\u0131 haz\u0131rlayarak, bu kontrata uygun da bir hizmet s\u0131n\u0131f\u0131 olu\u015fturmam\u0131z ard\u0131ndan art\u0131k uygun bir adres ve ba\u011flay\u0131c\u0131y\u0131 kullanarak WCF hizmetimizi sunabiliriz. WCF\u2019in en g\u00fczel yanlar\u0131ndan birisi basit i\u015flerimizi bir ka\u00e7 sat\u0131rl\u0131k kod ile halledebiliyor olmam\u0131zd\u0131r, pek \u00e7ok senaryoda uygulamam\u0131z\u0131n app.config dosyas\u0131nda WCF hizmet yap\u0131land\u0131rmam\u0131z\u0131 rahatl\u0131kla yapabiliriz. A\u015fa\u011f\u0131da sizlerle payla\u015ft\u0131\u011f\u0131m app.config dosyas\u0131nda \u00f6rnek WCF hizmetimizi kod yazmadan nas\u0131l yap\u0131land\u0131rabilece\u011finizi g\u00f6rebilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\" encoding=\"utf-8\" ?>\n&lt;configuration>\n  &lt;system.serviceModel>\n    &lt;services>\n      &lt;service\n              name=\"Com.Enterprisecoding.WCF.Ornek.OrnekHizmet\"\n              behaviorConfiguration=\"metaVeriDestegi\"\n      >\n        &lt;host>\n          &lt;baseAddresses>\n            &lt;add baseAddress=\"http:\/\/localhost:1234\/WCFOrnekleri\" \/>\n          &lt;\/baseAddresses>\n        &lt;\/host>\n        &lt;endpoint\n                  address=\"OrnekHizmet\"\n                  binding=\"wsHttpBinding\"\n                  contract=\"Com.Enterprisecoding.WCF.Ornek.IOrnekHizmet\"\n        \/>\n        &lt;endpoint\n                   address=\"mex\"\n                   binding=\"mexHttpBinding\"\n                   contract=\"IMetadataExchange\"\n        \/>\n      &lt;\/service>\n    &lt;\/services>\n\n    &lt;behaviors>\n      &lt;serviceBehaviors>\n        &lt;behavior name=\"metaVeriDestegi\">\n          &lt;serviceMetadata httpGetEnabled=\"true\"  httpGetUrl=\"\"\/>\n        &lt;\/behavior>\n      &lt;\/serviceBehaviors>\n    &lt;\/behaviors>\n  &lt;\/system.serviceModel>\n&lt;\/configuration><\/pre>\n\n\n\n<p>   WCF hizmet yap\u0131land\u0131rmam\u0131z configuration -&gt; system.serviceModel d\u00fc\u011f\u00fcm\u00fc alt\u0131nda yer alan iki ana gruptan olu\u015fmakta; hizmetlerimizi tan\u0131mlad\u0131\u011f\u0131m\u0131z <em>services<\/em> ve davran\u0131\u015flar\u0131m\u0131z\u0131 tan\u0131mlad\u0131\u011f\u0131m\u0131z <em>behaviors<\/em>. Uygulamam\u0131z i\u00e7erisinde olu\u015fturaca\u011f\u0131m\u0131z her bir WCF hizmeti i\u00e7in services d\u00fc\u011f\u00fcm\u00fc alt\u0131nda bir <strong>service<\/strong> girdisi bulunmal\u0131d\u0131r. Bir service d\u00fc\u011f\u00fcm\u00fcn\u00fcn hangi hizmet i\u00e7in oldu\u011fu ise <strong>name<\/strong> \u00f6zelli\u011fi i\u00e7erisinde hizmet s\u0131n\u0131f\u0131n\u0131n tam ad\u0131n\u0131n (namespace + s\u0131n\u0131f ad\u0131) verilmesi ile anla\u015f\u0131lacakt\u0131r. Tan\u0131mlanan hizmete ait davran\u0131\u015f bilgilerine ise <strong>behaviorConfiguration<\/strong> \u00f6zelli\u011fi ile at\u0131fta bulunabiliriz. Burada unutulmamas\u0131 gereken nokta <em>behaviorConfiguration<\/em> ile ad\u0131 belirtilen davran\u0131\u015f yap\u0131land\u0131rmas\u0131na dair behaviors alt\u0131nda mutlaka bir girdi bulunmal\u0131d\u0131r. Hizmet tan\u0131mlar\u0131 ile davran\u0131\u015flar\u0131n farkl\u0131 iki d\u00fc\u011f\u00fcm alt\u0131nda tan\u0131mlanmas\u0131 bize birden fazla hizmet tan\u0131m\u0131nda ayn\u0131 davran\u0131\u015flar\u0131 kullanabilmek kolayl\u0131\u011f\u0131n\u0131 sunacakt\u0131r.<\/p>\n\n\n\n<p>   Yukar\u0131daki WCF hizmet yap\u0131land\u0131rmam\u0131zda <strong>baseAddresses<\/strong> d\u00fc\u011f\u00fcm\u00fc alt\u0131nda hizmetimizin hangi temel adreslerden yay\u0131nlanaca\u011f\u0131n\u0131 belirtmekteyiz. Servisimiz farkl\u0131 protokoller i\u00e7in farkl\u0131 temel adreslere sahip olabilir, hizmetimiz \u00e7al\u0131\u015fmaya ba\u015flarken bu temel adreslerden kulland\u0131\u011f\u0131m\u0131z protokole uygun olan\u0131n\u0131 se\u00e7ecektir. Sadece http protokol\u00fc kullanan bir yap\u0131land\u0131rmam\u0131z oldu\u011fu i\u00e7in \u00f6rne\u011fimizde http:\/\/localhost:1234\/WCFOrnekleri temel adresi tan\u0131mlanm\u0131\u015ft\u0131r. A\u015fa\u011f\u0131da ise http ve netTcp i\u00e7in iki farkl\u0131 temel adresin nas\u0131l tan\u0131mlanaca\u011f\u0131na dair bir yap\u0131land\u0131rma par\u00e7ac\u0131\u011f\u0131 bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;baseAddreses>\n  &lt;add baseAddress=\"net.tcp:\/\/localhost:1234\/WCFOrnekleri\/YerelAg\"\/>\n  &lt;add baseAddress=\"http:\/\/localhost:1234\/WCFOrnekleri\/Internet\"\/>\n&lt;\/baseAddreses>\n&lt;endpoint\n       address=\"OrnekHizmet\"\n       binding=\"netTcpBinding\"\n       contract=\"Com.Enterprisecoding.WCF.Ornek.IOrnekHizmet\"\n    \/>\n&lt;endpoint\n       address=\"OrnekHizmet\"\n       binding=\"wsHttpBinding\"\n       contract=\"Com.Enterprisecoding.WCF.Ornek.IOrnekHizmet\"\n    \/><\/pre>\n\n\n\n<p>   \u00d6rnek yap\u0131land\u0131rmam\u0131zda <strong>endpoint<\/strong> d\u00fc\u011f\u00fcm\u00fc ile hizmetimizi hangi adres, protokol (<em>ba\u011flay\u0131c\u0131<\/em>) ve aray\u00fcz (<em>kontrat<\/em>) ile yay\u0131nlayaca\u011f\u0131m\u0131z\u0131 belirtmekteyiz. Bu yap\u0131land\u0131rma \u015fekli bize bir hizmet s\u0131n\u0131f\u0131n\u0131 birden fazla kontrat ile farkl\u0131 farkl\u0131 adres ve prokollerle yay\u0131nlayabilme \u015fans\u0131n\u0131 vermekte. A\u015fa\u011f\u0131da WCF hizmetleriniz i\u00e7in kullanabilece\u011finiz \u00f6ntan\u0131ml\u0131 binding&#8217;leri bulabilirsiniz;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>BasicHttpBinding<\/li><li>WSHttpBinding<\/li><li>WSDualHttpBinding<\/li><li>WSFederationHttpBinding<\/li><li>NetTcpBinding<\/li><li>NetNamedPipesBinding<\/li><li>NetMsmqBinding<\/li><li>NetPeerTcpBinding<\/li><li>MsmqIntegrationBinding<\/li><li>BasicHttpContextBinding<\/li><li>NetTcpContextBinding<\/li><li>WebHttpBinding<\/li><li>WSHttpContextBinding<\/li><\/ul>\n\n\n\n<p>   Dikkat ettiyseniz \u00f6rne\u011fimizde <strong>IMetadataExchange<\/strong> kontrat\u0131 ve <strong>mexHttpBinding<\/strong> protokol\u00fc ile <em>mex<\/em> adresinden yay\u0131nlanan ikinci bir hizmetimiz bulunmakta. mexHttpBinding bize http \u00fczerinden <em>WS-MetadataExchange<\/em> (<em>WS-MEX)<\/em> ileti\u015fimi yapabilme olana\u011f\u0131 sunacakt\u0131r, bu da istemcilerin servisimize ba\u011flanacak vekil (<em>proxy<\/em>) s\u0131n\u0131flar olu\u015fturmalar\u0131nda yard\u0131mc\u0131 olacakt\u0131r. mexHttpBinding, wsHttpBinding&#8217;in \u00e7al\u0131\u015fmas\u0131n\u0131 engelleyen ya da eklenmesi zorunlu bir protokol olmad\u0131\u011f\u0131ndan <u>ihtiya\u00e7 olmad\u0131k\u00e7a yap\u0131land\u0131rman\u0131za eklemenize gerek bulunmamakta<\/u>.<\/p>\n\n\n\n<p>   \u00d6rnek yap\u0131land\u0131rmam\u0131z\u0131n son b\u00f6l\u00fcm\u00fcnde yer alan <strong>behaviors<\/strong> d\u00fc\u011f\u00fcm\u00fc ile hizmetimizin davran\u0131\u015flar\u0131 tan\u0131mlanmaktad\u0131r. \u00d6rne\u011fimizde bu ba\u015fl\u0131k alt\u0131nda sadece servis meta verisinin yay\u0131nlanmas\u0131 i\u00e7in bir davran\u0131\u015f eklenmi\u015ftir. Yap\u0131land\u0131rmada kullan\u0131lan <strong>httpGetEnabled<\/strong> \u00f6zelli\u011fi Http protokol\u00fc \u00fczerinden GET y\u00f6netimi kullan\u0131larak meta verinin sorgulan\u0131p sorgulanamayaca\u011f\u0131n\u0131 belirlemektedir. Bu davran\u0131\u015f\u0131 eklemeniz ard\u0131ndan hizmetinize ba\u011flanmak \u00fczere vekil s\u0131n\u0131flar \u00fcretmek isteyen bir yaz\u0131l\u0131mc\u0131 hizmet adresinizin sonuna <em>?WSDL<\/em> ekleyerek hizmet \u015feman\u0131za eri\u015febilir (\u00f6rne\u011fin; <em>http:\/\/localhost:1234\/WCFOrnekleri?wsdl<\/em>). \u0130stemci ve sunucu kodlar\u0131n\u0131n sizin taraf\u0131n\u0131zdan yaz\u0131ld\u0131\u011f\u0131 senaryoda bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olu\u015fturmamak ad\u0131na bu davran\u0131\u015f\u0131 eklememenizi tavsiye ederim. Bu \u015fekilde hizmetinizde sundu\u011funuz fonksiyonaliteler 3. parti ki\u015filerce sorgulanamayaca\u011f\u0131ndan hizmetinize sald\u0131r\u0131 ihtimalinizi d\u00fc\u015f\u00fcrm\u00fc\u015f olursunuz.<\/p>\n\n\n\n<p>   WCF hizmet yap\u0131land\u0131rmam\u0131z\u0131 app.config dosyas\u0131 i\u00e7erisinde yapt\u0131ktan sonra i\u015fimiz olduk\u00e7a kolayla\u015fmakta. Yap\u0131land\u0131rma sonras\u0131nda geriye bir tek uygulamam\u0131z i\u00e7erisinden hizmetimizi ba\u015flatmak kal\u0131yor. A\u015fa\u011f\u0131da hizmetimizi nas\u0131l ba\u015flat\u0131p sonland\u0131rabilece\u011finizi bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var hizmetSunucusu = new ServiceHost(typeof(OrnekHizmet));\nhizmetSunucusu.Open();\n.\n.\n.\nhizmetSunucusu.Close();<\/pre>\n\n\n\n<p>   Bu kod par\u00e7ac\u0131\u011f\u0131n\u0131n ilk sat\u0131r\u0131nda <em>OrnekHizmet<\/em> t\u00fcr\u00fc i\u00e7in bir hizmet sunucu olu\u015fturuyoruz. Hizmet sunucumuz ba\u015flarken ihtiya\u00e7 duydu\u011fu yap\u0131land\u0131rma bilgisini app.config i\u00e7erisinde arayarak tam t\u00fcr ad\u0131n\u0131n (<em>Com.Enterprisecoding.WCF.Ornek.OrnekHizmet<\/em>) ge\u00e7ti\u011fi service d\u00fc\u011f\u00fcm\u00fc i\u00e7erisindeki bilgileri kullanacakt\u0131r.<\/p>","protected":false},"excerpt":{"rendered":"<p>.Net framework 3.0 ile hayat\u0131m\u0131z\u0131n bir par\u00e7as\u0131 olan Windows Communication Foundation (WCF) hakk\u0131nda yazmay\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn makalelerden bu ilkinde \u00f6ncelikle birlikte WCF hizmetlerine \u0131s\u0131nmam\u0131z\u0131 hedefliyorum, hedefim sizleri fazla da yormadan kolayca nas\u0131l bir WCF hizmeti olu\u015fturabilece\u011finizi payla\u015fmak. En temel anlat\u0131m\u0131yla Windows Communication Foundation, .Net framework 3.0\u2019\u0131n \u00e7\u0131kart\u0131lmas\u0131yla birlikte hayat\u0131m\u0131za giren ve .Net framework ile yazd\u0131\u011f\u0131n\u0131z uygulamalar\u0131n&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/wcf-giris\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":16802,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28,115],"tags":[116],"class_list":["post-8503","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","category-wcf","tag-wcf"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WCF&#039;e Giri\u015f - Fatih Boy<\/title>\n<meta name=\"description\" content=\"Windows Communication Foundation (WCF) ile yeni tan\u0131\u015fanlar ve daha fazla detaylar\u0131n\u0131 \u00f6\u011frenmek isteyenler i\u00e7in haz\u0131rlanm\u0131\u015f bir klavuz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/wcf-giris\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WCF&#039;e Giri\u015f - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"Windows Communication Foundation (WCF) ile yeni tan\u0131\u015fanlar ve daha fazla detaylar\u0131n\u0131 \u00f6\u011frenmek isteyenler i\u00e7in haz\u0131rlanm\u0131\u015f bir klavuz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/wcf-giris\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-02T21:18:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"WCF&#8217;e Giri\u015f\",\"datePublished\":\"2010-12-02T21:18:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/\"},\"wordCount\":1734,\"commentCount\":46,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg\",\"keywords\":[\"WCF\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\",\"WCF\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/wcf-giris\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/\",\"url\":\"https:\/\/fatihboy.com\/wcf-giris\/\",\"name\":\"WCF'e Giri\u015f - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg\",\"datePublished\":\"2010-12-02T21:18:47+00:00\",\"description\":\"Windows Communication Foundation (WCF) ile yeni tan\u0131\u015fanlar ve daha fazla detaylar\u0131n\u0131 \u00f6\u011frenmek isteyenler i\u00e7in haz\u0131rlanm\u0131\u015f bir klavuz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/wcf-giris\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg\",\"width\":1024,\"height\":768},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/wcf-giris\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WCF&#8217;e Giri\u015f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WCF'e Giri\u015f - Fatih Boy","description":"Windows Communication Foundation (WCF) ile yeni tan\u0131\u015fanlar ve daha fazla detaylar\u0131n\u0131 \u00f6\u011frenmek isteyenler i\u00e7in haz\u0131rlanm\u0131\u015f bir klavuz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/wcf-giris\/","og_locale":"en_US","og_type":"article","og_title":"WCF'e Giri\u015f - Fatih Boy","og_description":"Windows Communication Foundation (WCF) ile yeni tan\u0131\u015fanlar ve daha fazla detaylar\u0131n\u0131 \u00f6\u011frenmek isteyenler i\u00e7in haz\u0131rlanm\u0131\u015f bir klavuz.","og_url":"https:\/\/fatihboy.com\/en\/wcf-giris\/","og_site_name":"Fatih Boy","article_published_time":"2010-12-02T21:18:47+00:00","og_image":[{"width":1024,"height":768,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/wcf-giris\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/wcf-giris\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"WCF&#8217;e Giri\u015f","datePublished":"2010-12-02T21:18:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/wcf-giris\/"},"wordCount":1734,"commentCount":46,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg","keywords":["WCF"],"articleSection":["C#","T\u00fcrk\u00e7e","WCF"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/wcf-giris\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/wcf-giris\/","url":"https:\/\/fatihboy.com\/wcf-giris\/","name":"WCF'e Giri\u015f - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg","datePublished":"2010-12-02T21:18:47+00:00","description":"Windows Communication Foundation (WCF) ile yeni tan\u0131\u015fanlar ve daha fazla detaylar\u0131n\u0131 \u00f6\u011frenmek isteyenler i\u00e7in haz\u0131rlanm\u0131\u015f bir klavuz.","breadcrumb":{"@id":"https:\/\/fatihboy.com\/wcf-giris\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/wcf-giris\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/wcf-giris\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/8.jpg","width":1024,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/wcf-giris\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"WCF&#8217;e Giri\u015f"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/8503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=8503"}],"version-history":[{"count":0,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/8503\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/16802"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=8503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=8503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=8503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}