{"id":8587,"date":"2010-12-29T22:47:57","date_gmt":"2010-12-29T20:47:57","guid":{"rendered":"https:\/\/fatihboy.com\/post\/wcf-hizmeti-ornek-yonetimi"},"modified":"2010-12-29T22:47:57","modified_gmt":"2010-12-29T20:47:57","slug":"wcf-hizmeti-ornek-yonetimi","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/wcf-hizmeti-ornek-yonetimi\/","title":{"rendered":"WCF Hizmeti \u00d6rnek Y\u00f6netimi"},"content":{"rendered":"<p>&nbsp;&nbsp;&nbsp; Windows Communication Foundation ile kod geli\u015ftirme konusunda sizlerle bilgiler payla\u015ft\u0131\u011f\u0131m makalelerimde \u015fimdiye kadar giri\u015f d\u00fczeyinde sunucu ve istemci taraf\u0131nda yap\u0131lacak olan i\u015flemleri g\u00f6rd\u00fck. Makalelerimdeki ad\u0131mlar\u0131 takip ederek WCF ile kolayl\u0131kla bir istemci ve sunucu uygulamas\u0131 geli\u015ftirebildi\u011finizi umuyorum. Bu ad\u0131mlar ard\u0131ndan art\u0131k biraz daha zevkli konulara ge\u00e7menin san\u0131r\u0131m zaman\u0131 geldi. Bu makalemde sizlerle birlikte, Windows Communication Foundation&#8217;\u0131n gelen isteklere yan\u0131t verece\u011fi hizmet s\u0131n\u0131f\u0131 \u00f6rneklerini nas\u0131l olu\u015fturdu\u011funa ve yaz\u0131l\u0131m geli\u015ftirici olarak bizlerin hizmet s\u0131n\u0131f \u00f6rne\u011fi olu\u015fturulmas\u0131na nas\u0131l m\u00fcdahale edebilece\u011fimizi payla\u015f\u0131yor olaca\u011f\u0131m.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6nceki makalelerimde geli\u015ftirmi\u015f oldu\u011fumuz WCF sunucu uygulamam\u0131z basit bir aray\u00fcz ile a\u00e7t\u0131\u011f\u0131 hizmette istemciden Say fonksiyonuna gelen her bir \u00e7a\u011fr\u0131da private olarak tuttu\u011fu bir de\u011fi\u015fkenin de\u011ferini artt\u0131rmakta ve yeni de\u011ferini d\u00f6nmekteydi.<\/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]\nint Say();\n}\n\ninternal class OrnekHizmet : IOrnekHizmet {\nprivate int sayac = 0;\n\npublic OrnekHizmet() { }\n\npublic OrnekHizmet(int sayacBaslangici) {\nsayac = sayacBaslangici;\n}\n\n#region IOrnekHizmet Members\n\npublic int Say() {\nreturn ++sayac;\n}\n\n#endregion\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; A\u015fa\u011f\u0131da bulabilece\u011finiz istemci kodumuz, WCF hizmetimize tek bir istemci ile ard\u0131l olarak 10 istek g\u00f6ndererek sayac\u0131 artt\u0131rmakta ve genel saya\u00e7 bilgisini ekrana vermekte. \u0130\u00e7erik olarak <a href=\"http:\/\/www.yazgelistir.com\/Makaleler\/1000002660.ygpx\">\u00f6nceki makalem<\/a>de payla\u015ft\u0131klar\u0131mdan \u00e7okta farkl\u0131 bir kod de\u011fil;<\/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 istemci = istemciFabrikasi.CreateChannel();\nvar oturum = 1;\n\nfor (int cagri = 1; cagri &lt;= 10; cagri++) {\nConsole.WriteLine(\"{0}. oturum {1}. \u00e7a\u011fr\u0131, yan\u0131t : {2}\", oturum, cagri, istemci.Say());\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131da ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc alacaks\u0131n\u0131zd\u0131r;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_tekOturum.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_tekOturum_thumb.png\" alt=\"istemci_tekOturum\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Sunucumuza tek oturum ile istek g\u00f6nderdi\u011fimiz uygulamam\u0131z\u0131n \u00e7\u0131kt\u0131s\u0131 tam da istedi\u011fimiz gibi g\u00f6r\u00fcn\u00fcyor. \u0130stemcimize sunucunun a\u00e7\u0131k oldu\u011fu s\u00fcre boyunca gelen toplam istek say\u0131s\u0131 d\u00f6nmekte; ama emin konu\u015fmak i\u00e7in hen\u00fcz erken. \u0130sterseniz ayn\u0131 kodu bu defa iki istemci ile deneyelim. Bunun i\u00e7in istemci uygulamas\u0131n\u0131 iki defa \u00e7a\u011f\u0131rabilece\u011finiz gibi a\u015fa\u011f\u0131daki \u015fekilde ek bir d\u00f6ng\u00fc ile de istemci say\u0131s\u0131n\u0131 artt\u0131rman\u0131z m\u00fcmk\u00fcn;<\/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=\"\">for (int oturum = 1; oturum &lt;= 2; oturum++) {\nvar istemci = istemciFabrikasi.CreateChannel();\n\nfor (int cagri = 1; cagri &lt;= 10; cagri++) {\nConsole.WriteLine(\"{0}. oturum {1}. \u00e7a\u011fr\u0131, yan\u0131t : {2}\", oturum, cagri, istemci.Say());\n}\n}<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_ikiOturum.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_ikiOturum_thumb.png\" alt=\"istemci_ikiOturum\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Durun bir dakika; uygulamada bir terslik var gibi, hi\u00e7te bekledi\u011fimiz gibi bir \u00e7\u0131kt\u0131 yok kar\u015f\u0131m\u0131zda. Uygulamam\u0131z ikinci istemciyi olu\u015fturup istek g\u00f6ndermeye ba\u015flad\u0131\u011f\u0131nda sayac\u0131m\u0131z\u0131n 10&#8217;dan devam etmesini beklerken ba\u015ftan ba\u015flayarak 1&#8217;den itibaren saym\u0131\u015f. Bunun sebebini anlayabilmek i\u00e7in birlikte WCF \u00f6rnek y\u00f6netimi inceleyelim;<\/p>\n\n\n\n<p>&nbsp;&nbsp; Windows Communication Foundation bir hizmetin \u00f6rne\u011fi olu\u015fturmada bize 3 farkl\u0131 yol sunmaktad\u0131r;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Her bir a\u00e7\u0131lan oturuma tek bir hizmet \u00f6rne\u011fi atanmas\u0131n\u0131 sa\u011flayan <strong>PerSession<\/strong> <\/li><li>Yap\u0131lan her bir \u00e7a\u011fr\u0131 i\u00e7in bir hizmet \u00f6rne\u011fi atanmas\u0131n\u0131 sa\u011flayan <strong>PerCall<\/strong> <\/li><li>Gelen istek ve istemcilerden ba\u011f\u0131ms\u0131z olarak hizmetin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca tek bir \u00f6rne\u011finin olmas\u0131n\u0131 sa\u011flayan <strong>Single<\/strong> <\/li><\/ul>\n\n\n\n<p>&nbsp;&nbsp; Bu 3 y\u00f6ntemin kendilerine g\u00f6re art\u0131lar\u0131 ve eksileri bulunmakta, dolay\u0131s\u0131yla i\u015f mant\u0131\u011f\u0131n\u0131za uygun olan\u0131 se\u00e7meniz gerekecektir. Pek \u00e7ok i\u015f mant\u0131\u011f\u0131nda bu y\u00f6ntemlerin se\u00e7imindeki temel belirleyici kullan\u0131lacak kaynaklar\u0131n ne oldu\u011fu ve hizmet \u00f6rneklerinin bu kaynaklara ne \u015fekilde ula\u015faca\u011f\u0131d\u0131r. Bir WCF hizmeti olu\u015fturdu\u011funuzda varsay\u0131lan olarak bu 3 y\u00f6ntemden oturum ba\u015f\u0131na bir hizmet \u00f6rne\u011fi olu\u015fturulmas\u0131 (<strong>PerSession<\/strong>) kullan\u0131lmakta, bu sebeple uygulamam\u0131z\u0131 iki istemci ile istek g\u00f6nderecek \u015fekilde yeniden d\u00fczenledi\u011fimizde bekledi\u011fimizde farkl\u0131 bir \u00e7\u0131kt\u0131 g\u00f6rm\u00fc\u015f, sayac\u0131m\u0131z\u0131n yeni oturumda s\u0131f\u0131rland\u0131\u011f\u0131n\u0131 anlam\u0131\u015ft\u0131k.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Programsal olarak WCF hizmetinin ne \u015fekilde hizmet \u00f6rne\u011fi olu\u015fturabilece\u011fi bilgisini hizmet s\u0131n\u0131f\u0131m\u0131z\u0131n \u00fczerine ekleyece\u011fimiz <strong>ServiceBehaviorAttribute<\/strong> \u00f6zniteli\u011fi ile belirleyebiliriz. Asl\u0131nda WCF hizmetinin pek \u00e7ok \u00f6zelli\u011fini yap\u0131land\u0131rmam\u0131za izin veren ve detaylar\u0131n\u0131 ilerleyen makalelerimde payla\u015fmay\u0131 planlad\u0131\u011f\u0131m bu \u00f6znitelik i\u00e7erisindeki <strong>InstanceContextMode<\/strong> \u00f6zelli\u011fi do\u011frudan m\u00fcdahale etmemizi sa\u011flamakta. Bu noktada ak\u0131llara bu \u00f6zelli\u011fin neden hizmetimizi tan\u0131mlad\u0131\u011f\u0131m\u0131z aray\u00fcze de\u011fil de do\u011frudan hizmet s\u0131n\u0131f\u0131n\u0131n kendisine ekledi\u011fimiz sorusu gelebilir. Bunun yan\u0131t\u0131 bize bir esneklik sa\u011flamak; ama as\u0131l olarak da hizmet s\u0131n\u0131f \u00f6rne\u011finin ne \u015fekilde olu\u015fturulaca\u011f\u0131 bilgisinin aray\u00fcz ile do\u011frudan ili\u015fkili bir konu olmamas\u0131d\u0131r. Bu tan\u0131mlama aray\u00fcz \u00fczerinden bulunmu\u015f olsayd\u0131 aray\u00fcz\u00fc kullanan t\u00fcm hizmetleri ayn\u0131 \u00f6rnek y\u00f6netimini kullanmaya zorlam\u0131\u015f olurduk. Pek \u00e7ok WCF \u00f6rne\u011finde aray\u00fcz\u00fcn d\u0131\u015far\u0131da, \u00fc\u00e7\u00fcnc\u00fc bir assembly i\u00e7erisinde oldu\u011funu d\u00fc\u015f\u00fcn\u00fcrsek, asl\u0131nda aray\u00fcz bizim i\u00e7in sadece hizmetimizin s\u0131n\u0131rlar\u0131n\u0131 belirleyen bir kontrat oldu\u011fu ve istemci ile de payla\u015f\u0131ld\u0131\u011f\u0131 noktas\u0131na varabilirsiniz. \u0130stemcimizle payla\u015ft\u0131\u011f\u0131m\u0131z b\u00f6ylesi bir bilgi i\u00e7erisine hizmetimizin \u00f6rnek y\u00f6netiminin nas\u0131l oldu\u011funu da eklemek hem gereksiz olacak hem de baz\u0131 kullan\u0131mlarda g\u00fcvenlik zaafiyeti olu\u015fturabilecektir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Uygulamam\u0131z\u0131n ba\u015fta d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm\u00fcz \u015fekilde hareket ederek toplam gelen istek say\u0131s\u0131n\u0131 do\u011fru sayabilmesini sa\u011flamak i\u00e7in hizmet s\u0131n\u0131f\u0131m\u0131z\u0131n \u00fczerine a\u015fa\u011f\u0131daki \u015fekilde ServiceBehaviorAttribute \u00f6zniteli\u011fini eklememiz gerekecektir;<\/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=\"\">[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]\ninternal class OrnekHizmet : IOrnekHizmet {\nprivate int sayac = 0;\n\npublic OrnekHizmet() { }\n\npublic OrnekHizmet(int sayacBaslangici) {\nsayac = sayacBaslangici;\n}\n\n#region IOrnekHizmet Members\n\npublic int Say() {\nreturn ++sayac;\n}\n\n#endregion\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu \u015fekildeki d\u00fczenleme&nbsp; sonras\u0131nda uygulamam\u0131z a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde de g\u00f6rebilece\u011fimiz gibi istedi\u011fimiz y\u00f6nde \u00e7al\u0131\u015facakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_SingleInstanceContextMode.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_SingleInstanceContextMode_thumb.png\" alt=\"istemci_SingleInstanceContextMode\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Hizmetimizi her bir istek i\u00e7in yeni bir hizmet \u00f6rne\u011fi olu\u015fturacak \u015fekilde yap\u0131land\u0131rd\u0131\u011f\u0131m\u0131zda ise a\u015fa\u011f\u0131daki \u00e7\u0131kt\u0131 ile kar\u015f\u0131la\u015f\u0131r\u0131z;<\/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=\"\">[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]\ninternal class OrnekHizmet : IOrnekHizmet {\nprivate int sayac = 0;\n\npublic OrnekHizmet() { }\n\npublic OrnekHizmet(int sayacBaslangici) {\nsayac = sayacBaslangici;\n}\n\n#region IOrnekHizmet Members\n\npublic int Say() {\nreturn ++sayac;\n}\n\n#endregion\n}<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_PerCallInstanceContextMode.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_PerCallInstanceContextMode_thumb.png\" alt=\"istemci_PerCallInstanceContextMode\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131da her \u00fc\u00e7 y\u00f6nteminde kendilerine g\u00f6re art\u0131lar\u0131 ve eksileri oldu\u011fundan bahsetmi\u015ftim. Oturum ya da istek bazl\u0131 hizmet \u00f6rne\u011fi olu\u015fturulmas\u0131 her istemcide\/istekte yeni bir \u00f6rnek olu\u015fturaca\u011f\u0131ndan i\u015flemci zaman\u0131nda g\u00f6t\u00fcrecektir. \u00d6rne\u011fimizde kulland\u0131\u011f\u0131m\u0131z hizmet s\u0131n\u0131f\u0131m\u0131z \u00f6rnek olu\u015fturulmas\u0131 s\u0131ras\u0131nda yo\u011fun bir i\u015flem yapmamas\u0131 nedeniyle hissedilen bir fark yaratmayacak olsa da \u00f6rne\u011fin veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 ilklendiren ve ard\u0131ndan da yap\u0131land\u0131rma bilgisi okuyan bir hizmet i\u015f mant\u0131\u011f\u0131nda her bir istekte olu\u015facak hizmet s\u0131n\u0131f\u0131 hem uygulama sunucusuna hem de veritaban\u0131na ek bir maliyet getirecektir. B\u00f6ylesi bir \u00f6rnekte uygulama ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca ayakta kalacak bir hizmet \u00f6rne\u011finin olmas\u0131 daha mant\u0131kl\u0131 olabilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6te yandan tek bir hizmet \u00f6rne\u011fi olmas\u0131 durumunda payla\u015f\u0131lan kaynaklar\u0131n do\u011fru y\u00f6netilmesi gerekecektir. \u00d6rne\u011fimiz \u00fczerinden konu\u015facak olursak; InstanceContextMode.Single tan\u0131mlamas\u0131 ile tek bir hizmet \u00f6rne\u011fi olu\u015fmas\u0131n\u0131 istedikten sonra hizmetimize farkl\u0131 istemcilerden gelecek ayn\u0131 andaki istekler sayac\u0131n ayn\u0131 anda okunarak ayn\u0131 anda artt\u0131r\u0131lmas\u0131na, dolay\u0131s\u0131yla da toplam istek say\u0131s\u0131n\u0131n hatal\u0131 olmas\u0131na neden olacakt\u0131r. Bu gibi durumlardan ka\u00e7\u0131nmak ad\u0131na payla\u015f\u0131lan kaynaklar\u0131n do\u011fru tespit edilerek do\u011fru y\u00f6netilmesi gereklidir. A\u015fa\u011f\u0131da, b\u00f6ylesi bir durumu engellemek i\u00e7in nas\u0131l kodlanmas\u0131 gerekti\u011fine dair basit bir \u00f6rnek 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=\"\">[ServiceBehavior (InstanceContextMode = InstanceContextMode.Single)]\ninternal class OrnekHizmet : IOrnekHizmet {\n    private object monitor = new object ();\n    private int sayac = 0;\n\n    public OrnekHizmet () { }\n\n    public OrnekHizmet (int sayacBaslangici) {\n        sayac = sayacBaslangici;\n    }\n\n    #region IOrnekHizmet Members\n\n    public int Say () {\n        lock (monitor) {\n            return ++sayac;\n        }\n    }\n\n    #endregion\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Baz\u0131 i\u015f mant\u0131klar\u0131nda hizmet \u00f6rne\u011fi olu\u015fturulurken \u00e7e\u015fitli parametrelerin ge\u00e7ilmesi gerekebilir. \u00d6rne\u011fin sayac\u0131m\u0131z\u0131n uygulama kapan\u0131rken son de\u011ferini veritaban\u0131na yazarak, bir sonraki \u00e7al\u0131\u015fmas\u0131nda da veritaban\u0131ndan bu ed\u011feri okuyarak ba\u015flamas\u0131n\u0131 isteyebiliriz. Bu durumda <a href=\"http:\/\/www.yazgelistir.com\/Makaleler\/1000002643.ygpx\">programsal olarak bir wcf hizmetinin nas\u0131l olu\u015fturulabilece\u011fini<\/a> payla\u015ft\u0131\u011f\u0131m makalemde belirtti\u011fim sunucu uygulamam\u0131zda hizmetimizi olu\u015fturdu\u011fumuz a\u015fa\u011f\u0131daki sat\u0131r\u0131;<\/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=\"\">ServiceHost hizmetSunucusu = new ServiceHost(typeof(OrnekHizmet), hizmetTemelAdresi);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Hizmet s\u0131n\u0131f \u00f6rne\u011fimizi verecek \u015fekilde yeniden d\u00fczenlemeliyiz; <\/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 sayac = 0;\n\n\/\/Veritaban\u0131ndan sayac\u0131n son de\u011ferini okuyan\n\/\/i\u015f mant\u0131\u011f\u0131 buraya gelecek\n\nServiceHost hizmetSunucusu = new ServiceHost(new OrnekHizmet(sayac), hizmetTemelAdresi);<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_SingleInstanceCount.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/istemci_SingleInstanceCount_thumb.png\" alt=\"istemci_SingleInstanceCount\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; B\u00fcy\u00fck resme bakt\u0131\u011f\u0131m\u0131zda, Windows Communication Foundation ile \u00f6rnek y\u00f6netimi konusunda ileri d\u00fczey kullan\u0131mlarda \u00f6zelle\u015ftirme yap\u0131labilmesine olanak sunulurken, basit kullan\u0131mlar da d\u00fc\u015f\u00fcn\u00fclerek varsay\u0131lan genel ge\u00e7er bir tan\u0131mlama da yap\u0131lm\u0131\u015ft\u0131r. Biz yaz\u0131l\u0131m geli\u015ftiriciler i\u015f mant\u0131\u011f\u0131m\u0131z do\u011frultusunda bu y\u00f6ntemlerden uygun olan\u0131 se\u00e7meli, kodumuz i\u00e7erisinde ortak kullan\u0131lan kaynaklar\u0131m\u0131z\u0131n bulunmas\u0131 durumunda bu kaynaklar\u0131n kullan\u0131m\u0131na daha fazla \u00f6zen g\u00f6stererek istenmeyen durumlar\u0131n olu\u015fmas\u0131n\u0131n \u00f6n\u00fcne ge\u00e7meliyiz.<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp;&nbsp; Windows Communication Foundation ile kod geli\u015ftirme konusunda sizlerle bilgiler payla\u015ft\u0131\u011f\u0131m makalelerimde \u015fimdiye kadar giri\u015f d\u00fczeyinde sunucu ve istemci taraf\u0131nda yap\u0131lacak olan i\u015flemleri g\u00f6rd\u00fck. Makalelerimdeki ad\u0131mlar\u0131 takip ederek WCF ile kolayl\u0131kla bir istemci ve sunucu uygulamas\u0131 geli\u015ftirebildi\u011finizi umuyorum. Bu ad\u0131mlar ard\u0131ndan art\u0131k biraz daha zevkli konulara ge\u00e7menin san\u0131r\u0131m zaman\u0131 geldi. Bu makalemde sizlerle birlikte, Windows&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/wcf-hizmeti-ornek-yonetimi\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":8513,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28,115],"tags":[116],"class_list":["post-8587","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 Hizmeti \u00d6rnek Y\u00f6netimi - Fatih Boy<\/title>\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-hizmeti-ornek-yonetimi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WCF Hizmeti \u00d6rnek Y\u00f6netimi - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp;&nbsp; Windows Communication Foundation ile kod geli\u015ftirme konusunda sizlerle bilgiler payla\u015ft\u0131\u011f\u0131m makalelerimde \u015fimdiye kadar giri\u015f d\u00fczeyinde sunucu ve istemci taraf\u0131nda yap\u0131lacak olan i\u015flemleri g\u00f6rd\u00fck. Makalelerimdeki ad\u0131mlar\u0131 takip ederek WCF ile kolayl\u0131kla bir istemci ve sunucu uygulamas\u0131 geli\u015ftirebildi\u011finizi umuyorum. Bu ad\u0131mlar ard\u0131ndan art\u0131k biraz daha zevkli konulara ge\u00e7menin san\u0131r\u0131m zaman\u0131 geldi. Bu makalemde sizlerle birlikte, Windows...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/wcf-hizmeti-ornek-yonetimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-29T20:47:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png\" \/>\n\t<meta property=\"og:image:width\" content=\"209\" \/>\n\t<meta property=\"og:image:height\" content=\"208\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"WCF Hizmeti \u00d6rnek Y\u00f6netimi\",\"datePublished\":\"2010-12-29T20:47:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/\"},\"wordCount\":1364,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png\",\"keywords\":[\"WCF\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\",\"WCF\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/\",\"url\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/\",\"name\":\"WCF Hizmeti \u00d6rnek Y\u00f6netimi - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png\",\"datePublished\":\"2010-12-29T20:47:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png\",\"width\":209,\"height\":208,\"caption\":\"Windows Communication Foundation\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WCF Hizmeti \u00d6rnek Y\u00f6netimi\"}]},{\"@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 Hizmeti \u00d6rnek Y\u00f6netimi - Fatih Boy","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-hizmeti-ornek-yonetimi\/","og_locale":"en_US","og_type":"article","og_title":"WCF Hizmeti \u00d6rnek Y\u00f6netimi - Fatih Boy","og_description":"&nbsp;&nbsp;&nbsp; Windows Communication Foundation ile kod geli\u015ftirme konusunda sizlerle bilgiler payla\u015ft\u0131\u011f\u0131m makalelerimde \u015fimdiye kadar giri\u015f d\u00fczeyinde sunucu ve istemci taraf\u0131nda yap\u0131lacak olan i\u015flemleri g\u00f6rd\u00fck. Makalelerimdeki ad\u0131mlar\u0131 takip ederek WCF ile kolayl\u0131kla bir istemci ve sunucu uygulamas\u0131 geli\u015ftirebildi\u011finizi umuyorum. Bu ad\u0131mlar ard\u0131ndan art\u0131k biraz daha zevkli konulara ge\u00e7menin san\u0131r\u0131m zaman\u0131 geldi. Bu makalemde sizlerle birlikte, Windows...Read More","og_url":"https:\/\/fatihboy.com\/en\/wcf-hizmeti-ornek-yonetimi\/","og_site_name":"Fatih Boy","article_published_time":"2010-12-29T20:47:57+00:00","og_image":[{"width":209,"height":208,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png","type":"image\/png"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"WCF Hizmeti \u00d6rnek Y\u00f6netimi","datePublished":"2010-12-29T20:47:57+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/"},"wordCount":1364,"commentCount":1,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png","keywords":["WCF"],"articleSection":["C#","T\u00fcrk\u00e7e","WCF"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/","url":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/","name":"WCF Hizmeti \u00d6rnek Y\u00f6netimi - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png","datePublished":"2010-12-29T20:47:57+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/wcf_thumb.png","width":209,"height":208,"caption":"Windows Communication Foundation"},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/wcf-hizmeti-ornek-yonetimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"WCF Hizmeti \u00d6rnek Y\u00f6netimi"}]},{"@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\/8587","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=8587"}],"version-history":[{"count":0,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/8587\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/8513"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=8587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=8587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=8587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}