﻿
{"id":17748,"date":"2020-09-08T06:49:53","date_gmt":"2020-09-08T06:49:53","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=17748"},"modified":"2020-09-08T06:54:53","modified_gmt":"2020-09-08T06:54:53","slug":"asp-net-core-signalr-serisi-3-signalr-client-uygulamasijquery","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-signalr-serisi-3-signalr-client-uygulamasijquery\/","title":{"rendered":"Asp.NET Core &#8211; SignalR Serisi #3 &#8211; SignalR Client Uygulamas\u0131(jQuery)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-signalr-yazi-serisi\/\" rel=\"noopener noreferrer\" target=\"_blank\">SignalR Yaz\u0131 Seri<\/a>mizin en sonuncu <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-signalr-serisi-2-signalr-server-uygulamasi\/\" rel=\"noopener noreferrer\" target=\"_blank\">SignalR Server Uygulamas\u0131<\/a> ba\u015fl\u0131kl\u0131 makalesinde Asp.NET Core Web API \u00fczerinden bir SignalR server uygulamas\u0131n\u0131n nas\u0131l aya\u011fa kald\u0131r\u0131ld\u0131\u011f\u0131n\u0131 irdelemi\u015ftik. Akabinde bu i\u00e7eri\u011fimizde, geli\u015ftirilen server uygulamas\u0131na kar\u015f\u0131l\u0131k bir client uygulamas\u0131n\u0131 tasarlayacak ve hangi prensiplerle aya\u011fa kald\u0131r\u0131ld\u0131\u011f\u0131n\u0131 irdeleyece\u011fiz.<\/p>\n<p>\u0130lk olarak bir \u00e7o\u011fumuzun akl\u0131nda muhtemel olan <em><strong>Client&#8217;ta Hangi UI Teknolojisini Kullanmal\u0131y\u0131z?<\/strong><\/em> sualine kar\u015f\u0131l\u0131k bir ayd\u0131nlatmayla ba\u015flayal\u0131m. Client olarak Angular, Vue.js, React vs. gibi geli\u015fmi\u015f UI teknolojilerinden herhangi birini kullanabilir yahut jQuery gibi standart JavaScript k\u00fct\u00fcphanesiyle de geli\u015ftirme yapabilirsiniz. Hangi mimari ya da k\u00fct\u00fcphane ile \u00e7al\u0131\u015f\u0131yorsan\u0131z \u00e7al\u0131\u015f\u0131n ilgili uygulamaya <a style=\"color:orange;\" href=\"https:\/\/www.npmjs.com\/package\/@microsoft\/signalr\" rel=\"noopener noreferrer\" target=\"_blank\" class=\"broken_link\">@microsoft\/signalr<\/a> JavaScript k\u00fct\u00fcphanesini entegre etmeniz yeterli olacakt\u0131r. Geri kalan prensipler burada anlat\u0131lacak olan mant\u0131kla paralel bir \u015fekilde seyredecektir.<\/p>\n<p>Bu i\u00e7erikteki kullan\u0131lacak teknolojiyi sorarsan\u0131z e\u011fer ilk etapta jQuery ile bir girizgah ger\u00e7ekle\u015ftirilecek ve yaz\u0131 serisinin ileriki makalelerinde Angular \u00fczerinden de derinlemesine \u00f6rnekler bar\u0131nd\u0131ran numuneler payla\u015f\u0131lacakt\u0131r. O halde buyrun ba\u015flayal\u0131m&#8230;<\/p>\n<h3 style=\"color: #e83e8c;\">Ba\u015flarken<\/h3>\n<p>Yukar\u0131da belirtildi\u011fi gibi hangi UI teknolojisi kullan\u0131l\u0131rsa kullan\u0131ls\u0131n temel olarak <a style=\"color:orange;\" href=\"https:\/\/www.npmjs.com\/package\/@microsoft\/signalr\" rel=\"noopener noreferrer\" target=\"_blank\" class=\"broken_link\">@microsoft\/signalr<\/a> k\u00fct\u00fcphanesi \u00fczerinden \u00e7al\u0131\u015fma ger\u00e7ekle\u015ftirilecektir. Bizler, \u00f6rneklendirmede <u>\u015fimdilik<\/u> jQuery + HTML kullanaca\u011f\u0131m\u0131zdan dolay\u0131 ilgili k\u00fct\u00fcphaneyi ya npm \u00fczerinden ya da manuel entegre edece\u011fiz.<\/p>\n<p>Tabi ben \u015fimdilik npm \u00fczerinden bir entegrasyonu tercih ediyorum. Bunun i\u00e7in \u00f6ncelikle &#8216;package.json&#8217; dosyas\u0131n\u0131 olu\u015fturabilmek i\u00e7in <code>npm i(nit) -y<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131yor, ard\u0131ndan <code>npm install @microsoft\/signalr<\/code> komutuyla signalr.js k\u00fct\u00fcphanesini uygulamaya indiriyoruz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi.jpg\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131\" width=\"695\" height=\"439\" class=\"aligncenter size-full wp-image-17754\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi.jpg 695w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-300x189.jpg 300w\" sizes=\"auto, (max-width: 695px) 100vw, 695px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-1.jpg\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131\" width=\"163\" height=\"117\" class=\"aligncenter size-full wp-image-17755\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-2.jpg\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131\" width=\"195\" height=\"202\" class=\"aligncenter size-full wp-image-17756\" \/><\/a><\/p>\n<p>Ard\u0131ndan &#8216;signalr.js&#8217; ya da &#8216;signalr.min.js&#8217; dosyalar\u0131ndan herhangi birini HTML dosyas\u0131na kaynak olarak g\u00f6stererek a\u015fa\u011f\u0131daki tasar\u0131mda bulunuyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n   &lt;script src=&quot;node_modules\/@microsoft\/signalr\/dist\/browser\/signalr.min.js&quot;&gt;&lt;\/script&gt;\r\n   &lt;script src=&quot;node_modules\/jquery\/dist\/jquery.min.js&quot;&gt;&lt;\/script&gt;\r\n   &lt;script&gt;\r\n      $(document).ready(() =&gt; {\r\n         \/\/SignalR JavaScript kodlar\u0131 burada yaz\u0131lacak...\r\n      });\r\n   &lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n   &lt;input type=&quot;text&quot; id=&quot;txtMessage&quot;&gt; &lt;button&gt;G\u00f6nder&lt;\/button&gt;\r\n   &lt;ul id=&quot;messages&quot;&gt;\r\n   &lt;\/ul&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>Yukar\u0131daki tasar\u0131m\u0131 incelerseniz e\u011fer mesaj yazabilmek ve di\u011fer client&#8217;lara g\u00f6nderebilmek i\u00e7in TextBox ve Button nesneleri olu\u015fturulmu\u015f ve mesaj trafi\u011fini listeleyebilmek i\u00e7inse &#8216;ul&#8217; nesnesi eklenmi\u015ftir.<\/p>\n<p>\u015eimdi SignalR client kodlamas\u0131n\u0131 ad\u0131m ad\u0131m detayl\u0131ca ele alal\u0131m;<\/p>\n<ul>\n<li><strong>Ad\u0131m 1<\/strong><br \/>\n\u0130lk olarak SignalR server uygulamas\u0131n\u0131<span style=\"font-size:10px;\">(bir \u00f6nceki makalemizde olu\u015fturmu\u015ftuk. bknz : <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-signalr-serisi-2-signalr-server-uygulamasi\/\" rel=\"noopener noreferrer\" target=\"_blank\">SignalR Server Uygulamas\u0131<\/a>)<\/span> aya\u011fa kald\u0131ral\u0131m ve olu\u015fturulan Hub endpoint&#8217;i \u00fczerinden bir connection sa\u011flayal\u0131m.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-3.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-3.jpg\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131\" width=\"868\" height=\"170\" class=\"aligncenter size-full wp-image-17761\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-3.jpg 868w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-3-300x59.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-3-768x150.jpg 768w\" sizes=\"auto, (max-width: 868px) 100vw, 868px\" \/><\/a><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n         var connection = new signalR.HubConnectionBuilder()\r\n            .withUrl(&quot;https:\/\/localhost:5001\/myhub&quot;)\r\n            .build();\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 2<\/strong><br \/>\nBuild edilen connection \u00fczerinden &#8216;start&#8217; fonksiyonunu kullanarak ba\u011flant\u0131y\u0131 a\u00e7al\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n         connection.start();\r\n<\/pre>\n<p>Art\u0131k bu a\u00e7\u0131k ba\u011flant\u0131 \u00fczerinden SignalR ile ileti\u015fime ge\u00e7ebilecek, veri transferini sa\u011flayabilece\u011fiz.\n<\/li>\n<li><strong>Ad\u0131m 3<\/strong><br \/>\nSenaryoya uygun bir \u015fekilde butona t\u0131kland\u0131\u011f\u0131 vakit TextBox&#8217;tan girilen de\u011feri okuyal\u0131m ve connection&#8217;\u0131n &#8216;invoke&#8217; fonksiyonuyla server&#8217;da ki &#8216;SendMessageAsync&#8217; fonksiyonunu tetikleyerek elde edilen datay\u0131(message) g\u00f6nderelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n         $(&quot;button&quot;).click(() =&gt; {\r\n            let message = $(&quot;#txtMessage&quot;).val();\r\n            connection.invoke(&quot;SendMessageAsync&quot;, message)\r\n               .catch(error =&gt; console.log(&quot;Mesaj g\u00f6nderilirken hata al\u0131nm\u0131\u015ft\u0131r.&quot;));\r\n         });\r\n<\/pre>\n<p>&#8216;SendMessageAsync&#8217; metodunu hat\u0131rlarsan\u0131z e\u011fer server makalesinde tasarlad\u0131\u011f\u0131m\u0131z a\u015fa\u011f\u0131daki gibi bir metottur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class MyHub : Hub\r\n    {\r\n        public async Task SendMessageAsync(string message)\r\n        {\r\n            await Clients.All.SendAsync(&quot;receiveMessage&quot;, message);\r\n        }\r\n    }\r\n<\/pre>\n<p>\u0130\u00e7eri\u011fine g\u00f6z atarsak e\u011fer; bu metoda gelen t\u00fcm bildiriler, &#8216;receiveMessage&#8217; fonksiyonunu dinleyen t\u00fcm client&#8217;lara g\u00f6nderilecektir. Yukar\u0131daki kodlamada da bizler aynen bu i\u015fi yapm\u0131\u015f bulunmakta ve ilgili metodun tetiklenmesi neticesinde &#8216;receiveMessage&#8217;a abone olan t\u00fcm client&#8217;lara mesaj\u0131 g\u00f6ndermekteyiz. Haliyle s\u0131rada client&#8217;lar da &#8216;receiveMessage&#8217; fonksiyonunu tan\u0131mlamam\u0131z gerekmektedir.\n<\/li>\n<li><strong>Ad\u0131m 4<\/strong><br \/>\nServer taraf\u0131ndan bir client&#8217;\u0131n herhangi bir fonksiyonunu tetikleyebilmek i\u00e7in client o fonksiyona &#8216;on&#8217; fonksiyonu ile subscribe olmal\u0131d\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n         connection.on(&quot;receiveMessage&quot;, message =&gt; {\r\n            $(&quot;#messages&quot;).append(`${message}&lt;br&gt;`);\r\n         });\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere, ne zaman server&#8217;da &#8216;SendMessageAsync&#8217; fonksiyonu tetiklendi, o zaman &#8216;receiveMessage&#8217; fonksiyonuna subscribe olan t\u00fcm client&#8217;lar\u0131n bu fonksiyonu tetiklenecektir.\n<\/li>\n<\/ul>\n<p>\u0130\u015fte bu kadar&#8230;<\/p>\n<p>Yukar\u0131da bir client&#8217;\u0131n yapabilece\u011fi en sade \u00e7al\u0131\u015fmay\u0131 ad\u0131m ad\u0131m ele alm\u0131\u015f bulunmaktay\u0131z. Anla\u015f\u0131labilirli\u011fi kolayla\u015ft\u0131rmak i\u00e7in yukar\u0131daki par\u00e7a kodlar\u0131 derlememiz gerekirse e\u011fer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n   &lt;script&gt;\r\n      $(document).ready(() =&gt; {\r\n         var connection = new signalR.HubConnectionBuilder()\r\n            .withUrl(&quot;https:\/\/localhost:5001\/myhub&quot;)\r\n            .build();\r\n\r\n         connection.start();\r\n\r\n         $(&quot;button&quot;).click(() =&gt; {\r\n            let message = $(&quot;#txtMessage&quot;).val();\r\n            connection.invoke(&quot;SendMessageAsync&quot;, message)\r\n               .catch(error =&gt; console.log(&quot;Mesaj g\u00f6nderilirken hata al\u0131nm\u0131\u015ft\u0131r.&quot;));\r\n         });\r\n\r\n         connection.on(&quot;receiveMessage&quot;, message =&gt; {\r\n            $(&quot;#messages&quot;).append(`${message}&lt;br&gt;`);\r\n         });\r\n\r\n      });\r\n   &lt;\/script&gt;\r\n<\/pre>\n<p>\u015feklinde olacakt\u0131r.<\/p>\n<h3 style=\"color: #e83e8c;\">CORS Politikalar\u0131n\u0131 Ayarlama<\/h3>\n<p>Yap\u0131lan in\u015fa neticesinde client ile server aras\u0131nda veri payla\u015f\u0131m\u0131n\u0131n sa\u011fl\u0131kl\u0131 olabilmesi i\u00e7in CORS politikalar\u0131n\u0131n ayarlanmas\u0131 gerekmektedir. Aksi taktirde a\u015fa\u011f\u0131daki hatayla kar\u015f\u0131la\u015f\u0131lmas\u0131 y\u00fcksek olas\u0131d\u0131r;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-4.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-4.jpg\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131\" width=\"608\" height=\"59\" class=\"aligncenter size-full wp-image-17770\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-4.jpg 608w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-4-300x29.jpg 300w\" sizes=\"auto, (max-width: 608px) 100vw, 608px\" \/><\/a><br \/>\nCORS politikas\u0131 hakk\u0131nda bir fikre sahip de\u011filseniz <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-uygulamalarinda-corscross-origin-resource-sharing-politikasi-ayarlama\/\" rel=\"noopener noreferrer\" target=\"_blank\">Asp.NET Core Uygulamalar\u0131nda CORS(Cross-Origin-Resource-Sharing) Politikas\u0131 Ayarlama<\/a> ba\u015fl\u0131kl\u0131 makaleyi okuman\u0131z\u0131 tavsiye ederim.<\/p>\n<p>CORS politikas\u0131 i\u00e7in a\u015fa\u011f\u0131daki konfig\u00fcrasyon yeterli olacakt\u0131r;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Startup\r\n    {\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            .\r\n            .\r\n            .\r\n            services.AddCors(options =&gt; options.AddDefaultPolicy(policy =&gt;\r\n                                policy.AllowAnyMethod()\r\n                                      .AllowAnyHeader()\r\n                                      .AllowCredentials()\r\n                                      .SetIsOriginAllowed(origin =&gt; true)));\r\n            .\r\n            .\r\n            .\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            .\r\n            .\r\n            .\r\n            app.UseCors();\r\n            app.UseRouting();\r\n            .\r\n            .\r\n            .\r\n        }\r\n    }\r\n<\/pre>\n<h3 style=\"color: #e83e8c;\">Test Edelim<\/h3>\n<p>\u015eimdi, in\u015fa edilen uygulama \u00fczerinden birden fazla client olu\u015ftural\u0131m ve a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi test edelim.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-UygulamasijQuery.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-UygulamasijQuery.gif\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131(jQuery)\" width=\"800\" height=\"465\" class=\"aligncenter size-full wp-image-17774\" \/><\/a><\/p>\n<h3 style=\"color: #e83e8c;\">K\u00fc\u00e7\u00fck Konfig\u00fcrasyonlar<\/h3>\n<p><strong>start fonksiyonu durum fonksiyonlar\u0131<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n         connection.start()\r\n            .then(() =&gt; console.log(&quot;Ba\u011flant\u0131 ba\u015far\u0131yla ger\u00e7ekle\u015ftirildi.&quot;))\r\n            .catch(error =&gt; console.log(&quot;Ba\u011flant\u0131 sa\u011flan\u0131rken beklenmeyen bir hatayla kar\u015f\u0131la\u015f\u0131ld\u0131.&quot;));\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-5.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-5.jpg\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131\" width=\"259\" height=\"27\" class=\"aligncenter size-full wp-image-17776\" \/><\/a><\/p>\n<p><strong>connection state bilgisi<\/strong><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n         console.log(connection.connectionState)\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-6.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-3-SignalR-Client-Uygulamasi-6.jpg\" alt=\"Asp.NET Core - SignalR Serisi #3 - SignalR Client Uygulamas\u0131\" width=\"90\" height=\"21\" class=\"aligncenter size-full wp-image-17778\" \/><\/a><\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek projeyi indirmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/SignalRExampleUI.zip\">buraya<\/a> t\u0131klay\u0131n\u0131z.<\/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, SignalR Yaz\u0131 Serimizin en sonuncu SignalR Server Uygulamas\u0131 ba\u015fl\u0131kl\u0131 makalesinde Asp.NET Core Web API \u00fczerinden bir SignalR server uygulamas\u0131n\u0131n nas\u0131l aya\u011fa kald\u0131r\u0131ld\u0131\u011f\u0131n\u0131 irdelemi\u015ftik. Akabinde bu i\u00e7eri\u011fimizde, geli\u015ftirilen server uygulamas\u0131na kar\u015f\u0131l\u0131k bir client uygulamas\u0131n\u0131&#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":17653,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3760],"tags":[3772,3771,3773],"class_list":["post-17748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-signalr","tag-asp-net-core-signalr-client","tag-signalr-client","tag-signalr-jquery-client"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17748","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=17748"}],"version-history":[{"count":25,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17748\/revisions"}],"predecessor-version":[{"id":17783,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17748\/revisions\/17783"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/17653"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=17748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=17748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=17748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}