{"id":33092,"date":"2010-12-26T17:50:37","date_gmt":"2010-12-26T15:50:37","guid":{"rendered":"https:\/\/fatihboy.com\/post\/tfs2010-olay-aboneligi"},"modified":"2010-12-26T17:50:37","modified_gmt":"2010-12-26T15:50:37","slug":"tfs2010-olay-aboneligi","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/tfs2010-olay-aboneligi\/","title":{"rendered":"Team Foundation Server 2010, Olay Aboneli\u011fi"},"content":{"rendered":"<p>&nbsp;&nbsp; Microsoft Team Foundation Server, tasar\u0131m olarak pek \u00e7ok noktada bizlere sundu\u011fu \u00f6zellikleri kullanarak yeni \u00f6zellikler sunmam\u0131z\u0131 sa\u011flamak amac\u0131yla esnek ve geni\u015fletilebilir olarak tasarlanm\u0131\u015ft\u0131r. Bu esneklikler aras\u0131nda belki de en \u00f6nemlilerinden birisi <strong>olay bildirimleri<\/strong>dir. Yap\u0131land\u0131rma y\u00f6netimi (<em>configuration management<\/em>), kaynak kodu kontrol\u00fc (<em>source control<\/em>), i\u015f kalemi takibi (<em>work item tracking<\/em>), t\u00fcmle\u015fik entegrasyon (<em>continuous Integration<\/em>) gibi pek \u00e7ok birbirinden ba\u011f\u0131ms\u0131z bile\u015fene sahip olan Team Foundation Server, ya\u015fam d\u00f6ng\u00fcs\u00fc i\u00e7erisinden bu par\u00e7alarda olu\u015fan aktiviteler do\u011frultusunda \u00e7e\u015fitli bildirimler ile bu aktivitelerden haberdar olmak isteyen abonelerini bilgilendirebilir. Hatta bunun bir ad\u0131m \u00f6tesinde, istenirse kendi \u00f6zel olay bildirimlerimizi olu\u015fturup Team Foundation Server ya\u015fam d\u00f6ng\u00fcs\u00fc i\u00e7erisine dahil edebiliriz. Konuyu \u00e7ok fazla da\u011f\u0131tmamak ad\u0131na bu makalemde sizlerle Team Foundation taraf\u0131ndan yay\u0131nlanan bu olay bildirimlerine nas\u0131l abone olabilece\u011fimizi payla\u015f\u0131yor olaca\u011f\u0131m. \u0130lerleyen makalelerimde, f\u0131rsat bulduk\u00e7a nas\u0131l kendi \u00f6zel olay bildirimizi olu\u015fturarak Team Foundation Server ya\u015fam d\u00f6ng\u00fcs\u00fcne dahil edebilece\u011fimizi de sizlerle payla\u015f\u0131yor olaca\u011f\u0131m.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Team Foundation Server\u2019\u0131n harici sistemler ile haberle\u015fmesini de sa\u011flayan olay bildirimleri, \u00f6rne\u011fin; bir kullan\u0131c\u0131ya atanan yeni bir i\u015ften harici bir s\u00fcre\u00e7 y\u00f6netimi yaz\u0131l\u0131m\u0131n\u0131n da haberdar olabilmesini ya da yap\u0131lan bir check-in i\u015flemi sonras\u0131nda kodun harici bir uygulama taraf\u0131ndan incelenmesinin tetiklenmesi sa\u011flayabilir. Bu kullan\u0131mlar d\u0131\u015f\u0131nda Team Foundation Server\u2019\u0131n kendisi dahi bu mekanizmay\u0131 kullanmakta, buna en g\u00fczel \u00f6rnek Visual Studio i\u00e7erisindeki team explorer tab\u0131nda bulunan \u201cproject alerts\u201d diyalo\u011fudur.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/ProjectAlertsDiyalogu.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/ProjectAlertsDiyalogu_thumb.png\" alt=\"Project Alerts diyalo\u011fu\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Project Alerts diyalo\u011fu yard\u0131m\u0131yla Team Foundation Server projelerinizde size atanm\u0131\u015f i\u015f kalemlerindeki de\u011fi\u015fikliklerde, yap\u0131lan bir check-in\u2019de, build kalitesinin de\u011fi\u015fmesinde, kendinizin tetikledi\u011fi ya da herhangi birisi taraf\u0131ndan tetiklenmi\u015f olan build i\u015flemleri tamamland\u0131\u011f\u0131nda belirtti\u011finiz email adresine bir mail g\u00f6nderimi yap\u0131lmakta. Bu diyalog asl\u0131nda arka planda yer alan Team Foundation Server olay bildirimleri aboneli\u011fi i\u00e7in haz\u0131rlanm\u0131\u015f basit bir ekrand\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Project Alerts diyalo\u011fuyla yapt\u0131\u011f\u0131n\u0131z t\u00fcm i\u015flemleri ve daha fazlas\u0131n\u0131 komut sat\u0131r\u0131ndan <strong>BisSubscribe.exe<\/strong> uygulamas\u0131 yard\u0131m\u0131yla da ger\u00e7ekle\u015ftirebilirsiniz. Team Foundation Server\u2019\u0131n kurulu oldu\u011fu sunucuda bulunan <em>%ProgramFiles%\\Microsoft Team Foundation Server 2010\\Tools<\/em> klas\u00f6r\u00fc alt\u0131nda bulabilece\u011finiz&nbsp; bu uygulama ayn\u0131 zamanda kendi geli\u015ftirdi\u011finiz istemcilerin olay aboneliklerini yapmak i\u00e7in de kullan\u0131labilir. Olay t\u00fcr\u00fc, adres,&nbsp; teslim \u015fekli, sunucu ve filtre parametrelerini kabul ederek i\u015flem yapan bu uygulaman\u0131n kullan\u0131m\u0131na bu makalenin hedef konusu olmad\u0131\u011f\u0131 i\u00e7in ilerleyen makalelerde de\u011finmeyi planlamakla birlikte \u00f6rnek olmas\u0131 ad\u0131na yukar\u0131da g\u00f6r\u00fclen check-in\u2019lerde mail g\u00f6nderilmesi i\u00e7in kullan\u0131labilecek olan komut sat\u0131r\u0131n\u0131 a\u015fa\u011f\u0131da payla\u015f\u0131yorum;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"msdos\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">BisSubscribe \/eventType CheckinEvent \/address fatih@encbulut.com \/deliveryType EmailHtml \/server http:\/\/scm:8080\/tfs<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Team Foundation Server olay bildirimlerini C# i\u00e7erisindeki olay (<em>event<\/em>) ile ba\u011fda\u015ft\u0131rabiliriz, nas\u0131l ki belirli bir kontrata\/aray\u00fcze uygun olan fonksiyonlar yard\u0131m\u0131yla C# olaylar\u0131 dinlenebiliyorsa, Team Foundation Server olay bildirimlerini de benzer \u015fekilde belirli bir aray\u00fcze\/\u015femaya uygun olan web servisleri vas\u0131tas\u0131yla dinleyebiliriz. Olay dinleme s\u00fcreci istemci taraf\u0131nda a\u00e7\u0131lan ve biraz \u00f6nce bahsetti\u011fim aray\u00fcz\u00fc uygulayan bir web hizmeti (<em>web service<\/em>) ile ba\u015flamaktad\u0131r. \u0130stemci, hizmetin \u00e7al\u0131\u015f\u0131r duruma gelmesi sonras\u0131nda Team Foundation Server\u2019a hizmet adresini, dinlemek istedi\u011fi olay bildirimi detaylar\u0131 ile birlikte bildirerek aboneli\u011fini ba\u015flat\u0131r. Aboneli\u011fin ba\u015flamas\u0131 sonras\u0131nda ilgili olay ger\u00e7ekle\u015ftik\u00e7e Team Foundation Server olay verisiyle istemcinin belirtti\u011fi web hizmetini tetikleyecektir. Bu tetikleme sonras\u0131nda istemci kendi i\u015f mant\u0131\u011f\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdi isterseniz ad\u0131m ad\u0131m bu s\u00fcre\u00e7leri kodumuza aktaral\u0131m. \u0130lk ad\u0131m\u0131m\u0131z hizmet aray\u00fcz\u00fcn\u00fc olu\u015fturmak olmal\u0131. A\u015fa\u011f\u0131da Team Foundation Server taraf\u0131ndan olay bildirimlerinde kullan\u0131lan aray\u00fcz\u00fc 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=\"\">[ServiceContract(Namespace = \"http:\/\/schemas.microsoft.com\/TeamFoundation\/2005\/06\/Services\/Notification\/03\")]\ninternal interface INotificationService {\n    [OperationContract(Action = \"http:\/\/schemas.microsoft.com\/TeamFoundation\/2005\/06\/Services\/Notification\/03\/Notify\", ReplyAction = \"*\")]\n    [XmlSerializerFormat(Style = OperationFormatStyle.Document)]\n    void Notify(string eventXml, string tfsIdentityXml);\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; <strong>INotificationService<\/strong> aray\u00fcz\u00fc g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi olduk\u00e7a basit bir aray\u00fcz. Tek fonksiyonu olan <strong>Notify<\/strong> ile sunucuda olu\u015fan olay bilgileri rahatl\u0131kla uygulamam\u0131za aktar\u0131labilir. Notify fonksiyonunda dikkatinizi mutlaka \u00e7ekmi\u015ftir, olay verisi string format\u0131nda bize aktar\u0131lmakta. Bunu nedeni daha \u00f6ncede bahsetti\u011fim gibi Team Foundation Server olay bildirimlerinin esnek ve gerekti\u011finde kullan\u0131c\u0131lar\u0131n kendi tan\u0131mlamalar\u0131n\u0131 yapmas\u0131na izin vermesidir. B\u00f6ylesi bir mimaride birbirinden \u00e7ok farkl\u0131 i\u00e7eri\u011fi sahip olan olay verilerinin standart bir nesne \u00fczerinde toplanmas\u0131 olduk\u00e7a zordur. Bu sebeple veri xml yap\u0131s\u0131nda; fakat string olarak kabul edilmelidir. \u0130stemci, abone oldu\u011fu olay t\u00fcr\u00fcn\u00fc bilmesi nedeniyle, gelecek olan xml yap\u0131s\u0131n\u0131 bilebilece\u011finden ufak bir xml d\u00f6n\u00fc\u015f\u00fcm\u00fc ile verileri nesnelere kolayl\u0131kla ba\u011flayabilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; INotificationService aray\u00fcz\u00fcnde dikkat edilecek \u00f6nemli bir nokta da gelen verinin deserilize edilirken i\u00e7erik format\u0131 dok\u00fcman olarak i\u015flenmeli. Yukar\u0131da da g\u00f6rebilece\u011finiz gibi dok\u00fcman olarak i\u015flenmesi i\u00e7in fonksiyona <strong>XmlSeriliazerFormat<\/strong> \u00f6zniteli\u011fi ile format stili olarak <strong>OperationFormatStyle.Document<\/strong> verilmesi yeterli olacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; ikinci ad\u0131mda bu aray\u00fcz\u00fc uygulayan bir hizmet s\u0131n\u0131f\u0131 olu\u015fturmal\u0131 ve bunu bir wcf hizmeti \u00fczerinden yay\u0131nlamal\u0131y\u0131z. Bu ad\u0131m\u0131mda teknik bir detay olmamas\u0131 nedeniyle ge\u00e7iyorum, tak\u0131lman\u0131z durumunda ilerleyen \u00f6rneklerde bu konuda bilgi bulabilirsiniz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u0130lk iki ad\u0131m ard\u0131ndan art\u0131k elimizde sunulmaya haz\u0131r bir web hizmeti bulunmakta. Team Foundation Server olay bildirim aboneli\u011fimizi ba\u015flatmadan \u00f6nce, hizmetimizi \u00e7al\u0131\u015f\u0131r durumda istemcilere sunuyor olmam\u0131z gerekli. WCF ile u\u011fra\u015fanlar\u0131n\u0131z i\u00e7in a\u015fa\u011f\u0131daki sat\u0131rlarla hizmeti ba\u015flatmak hi\u00e7 zor olmayacakt\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=\"\">hizmet = new ServiceHost(typeof(NotificationService), temelAdres);\n\nhizmet.AddServiceEndpoint(typeof(INotificationService), new WSHttpBinding(SecurityMode.None), \"NotificationService\");\nhizmet.Open();<\/pre>\n\n\n\n<p>&nbsp;&nbsp; WSHttp ba\u011flay\u0131c\u0131s\u0131 ile sundu\u011fumuz web hizmetimiz i\u00e7in kullan\u0131lacak temel adres tamamen sizin tercihinize kalm\u0131\u015ft\u0131r. Kendi kullan\u0131m\u0131mda yukar\u0131daki \u00f6rnekte yer alan ver Uri t\u00fcr\u00fcndeki temelAdres de\u011fi\u015fkeni \u201c<em>http:\/\/&lt;hizmetin \u00e7al\u0131\u015ft\u0131\u011f\u0131 makine ad\u0131&gt;:8081<\/em>\u201d \u015feklinde bir de\u011fere sahip. \u00d6rne\u011fimizde hizmetimiz http:\/\/&lt;hizmetin \u00e7al\u0131\u015ft\u0131\u011f\u0131 makine ad\u0131&gt;:8081\/NotificationService adresine gelecek istekleri bekleyecek \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015f durumda.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu i\u015flemler ard\u0131nda art\u0131k web hizmetimiz gelecek istekleri kabul etmeye haz\u0131r durumda beklemekte. Son ad\u0131m\u0131m\u0131zda art\u0131k web hizmetimizi Team Foundation Server\u2019a istek detaylar\u0131 ile bildirerek olay aboneli\u011fimizi ba\u015flatabiliriz.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Team Foundation Server\u2019a programsal olarak bir olay aboneli\u011fi yap\u0131lmas\u0131 i\u00e7in <strong>IEventService<\/strong> hizmet kullan\u0131labilir. \u00c7al\u0131\u015ft\u0131\u011f\u0131m\u0131z aktif proje koleksiyonu \u00fczerinde sorgulayarak ula\u015fabilece\u011fimiz bu aray\u00fcz \u00fczerindeki <strong>SubscribeEvent<\/strong> fonksiyonu sayesinde olay aboneli\u011fimizi kolayl\u0131kla ba\u015flatabiliriz. Bu ad\u0131m programsal olarak i\u015fletilmek yerine yaz\u0131m\u0131n ba\u015flar\u0131nda sizinle payla\u015ft\u0131\u011f\u0131m BisSubscribe uygulamas\u0131 yard\u0131m\u0131yla komut sat\u0131r\u0131ndan da ger\u00e7ekle\u015ftirilebilir; fakat her zaman i\u00e7in kontrol\u00fcn bizde olmas\u0131 bence daha iyidir.<\/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 ekipProjeKoleksiyonu = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsServerUri);\nekipProjeKoleksiyonu.EnsureAuthenticated();\n\nolayHizmeti = (IEventService)ekipProjeKoleksiyonu.GetService(typeof(IEventService));\n\nvar teslimatSecenekleri = new DeliveryPreference {\n    Address = temelAdres.AbsoluteUri + \"NotificationService\",\n    Schedule = DeliverySchedule.Immediate,\n    Type = DeliveryType.Soap\n};\n\nabonelikId = olayHizmeti .SubscribeEvent(\"CheckinEvent\", string.Empty, teslimatSecenekleri);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz&nbsp; <strong>DeliveryPreference<\/strong> t\u00fcr\u00fcnden teslimatSecenekleri de\u011fi\u015fkeni kullan\u0131larak olay bildirimlerinin ne zaman, hangi \u015fekilde ve hangi adres yap\u0131laca\u011f\u0131n\u0131 bildirmi\u015f oluyorum. \u00d6rne\u011fimiz i\u00e7in olay bildirimleri biraz \u00f6nce a\u00e7t\u0131\u011f\u0131m\u0131z hizmetimize, an\u0131nda ve soap protokol\u00fc \u00fczerinden bildirilecek \u015fekilde bir abonelik kayd\u0131 ba\u015flat\u0131lmakta.<\/p>\n\n\n\n<p>&nbsp; \u00d6rne\u011fimizde Check-in olay bildirimleri i\u00e7in bir abonelik ba\u015flat\u0131lmakta. Team Foundation Server kurulumu sonras\u0131nda a\u015fa\u011f\u0131daki olay t\u00fcrleri \u00f6n y\u00fckl\u00fc olarak gelmekte. Kurumunuzdaki Team Foundation Server y\u00f6neticilerinin kendi \u00f6zel bildirimlerini de kay\u0131t ettirmeleri halinde bu liste daha da uzayacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><tbody><tr><td>Hizmet<\/td><td>Olay<\/td><\/tr><tr><td>Work Item Tracking<\/td><td>WorkItemChangedEvent<\/td><\/tr><tr><td>Version Control<\/td><td>CheckInEvent<\/td><\/tr><tr><td>Team Build<\/td><td>BuildCompletionEvent2<\/td><\/tr><tr><td>Team Build<\/td><td>BuildStatusChangeEvent<\/td><\/tr><tr><td>Team Build<\/td><td>BuildCompletionEvent<\/td><\/tr><tr><td>Common Structure Service<\/td><td>ProjectCreatedEvent<\/td><\/tr><tr><td>Common Structure Service<\/td><td>ProjectDeletedEvent<\/td><\/tr><tr><td>GSS\/Authorization\/CSS<\/td><td>DataChangedEvent<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; \u0130\u015fte bu kadar kolay, bu ad\u0131mlar\u0131n takip edilmesi sonras\u0131nda olay aboneli\u011fi ba\u015flayarak ilgili olaylar ger\u00e7ekle\u015fti\u011finde web hizmetinize veri ak\u0131\u015f\u0131 sa\u011flanacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-MainScreen.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-MainScreen_thumb.png\" alt=\"Check-In Notifier a\u00e7\u0131l\u0131\u015f ekran\u0131\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Bu makalemde sizlerle payla\u015fm\u0131\u015f oldu\u011fum Team Foundation Server 2010 olay aboneli\u011fi konusunda geli\u015ftirdi\u011fim \u00f6rnek bir projeyi <a title=\"http:\/\/fth.by\/checkinnotifier\" href=\"http:\/\/fth.by\/checkinnotifier\">http:\/\/fth.by\/checkinnotifier<\/a> adresinden sizlerle payla\u015f\u0131yorum.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-PopUp.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-PopUp_thumb.png\" alt=\"Yap\u0131lan her bir check-in sonras\u0131nda a\u00e7\u0131lan \u00f6zet bilgi ekran\u0131\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Yap\u0131lan her check-in ard\u0131ndan system tray\u2019in hemen \u00fczerinde bir diyalog ile check-in ve detaylar\u0131 hakk\u0131nda h\u0131zl\u0131 bilgiler verilmekte.<\/p>\n\n\n\n<p>Chanset Details ekran\u0131 \u00fczerinden yap\u0131lan check-in\u2019e ait detayl\u0131 bilgilere ula\u015fabilirsiniz;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-ChangesetDetails.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-ChangesetDetails_thumb.png\" alt=\"Check-in'e ait detayl\u0131 bilgilerin verildi\u011fi Changeset Details diyalo\u011fu\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-EffectedFiles.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/CheckinNotifier-EffectedFiles_thumb.png\" alt=\"Check-in ile etkilenen dosyalar\u0131n listelendi\u011fi Effected Versioned Items diyalo\u011fu\"\/><\/a><\/figure>\n\n\n\n<p>Effected Versioned Items diyalo\u011funda yap\u0131lan check-in\u2019le eklenen\/de\u011fi\u015ftirilen\/silinen girdilere ula\u015fabilir, bu girdileri bir \u00f6nceki s\u00fcr\u00fcmleri ile kar\u015f\u0131la\u015ft\u0131rabilirsiniz;<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; Microsoft Team Foundation Server, tasar\u0131m olarak pek \u00e7ok noktada bizlere sundu\u011fu \u00f6zellikleri kullanarak yeni \u00f6zellikler sunmam\u0131z\u0131 sa\u011flamak amac\u0131yla esnek ve geni\u015fletilebilir olarak tasarlanm\u0131\u015ft\u0131r. Bu esneklikler aras\u0131nda belki de en \u00f6nemlilerinden birisi olay bildirimleridir. Yap\u0131land\u0131rma y\u00f6netimi (configuration management), kaynak kodu kontrol\u00fc (source control), i\u015f kalemi takibi (work item tracking), t\u00fcmle\u015fik entegrasyon (continuous Integration) gibi pek&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/tfs2010-olay-aboneligi\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":8570,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71,28],"tags":[59],"class_list":["post-33092","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-team-foundation-server","category-turkce","tag-team-foundation-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Team Foundation Server 2010, Olay Aboneli\u011fi - 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\/tfs2010-olay-aboneligi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Team Foundation Server 2010, Olay Aboneli\u011fi - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; Microsoft Team Foundation Server, tasar\u0131m olarak pek \u00e7ok noktada bizlere sundu\u011fu \u00f6zellikleri kullanarak yeni \u00f6zellikler sunmam\u0131z\u0131 sa\u011flamak amac\u0131yla esnek ve geni\u015fletilebilir olarak tasarlanm\u0131\u015ft\u0131r. Bu esneklikler aras\u0131nda belki de en \u00f6nemlilerinden birisi olay bildirimleridir. Yap\u0131land\u0131rma y\u00f6netimi (configuration management), kaynak kodu kontrol\u00fc (source control), i\u015f kalemi takibi (work item tracking), t\u00fcmle\u015fik entegrasyon (continuous Integration) gibi pek...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/tfs2010-olay-aboneligi\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-26T15:50:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_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\/tfs2010-olay-aboneligi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"Team Foundation Server 2010, Olay Aboneli\u011fi\",\"datePublished\":\"2010-12-26T15:50:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/\"},\"wordCount\":1466,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png\",\"keywords\":[\"Team Foundation Server\"],\"articleSection\":[\"Team Foundation Server\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/\",\"url\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/\",\"name\":\"Team Foundation Server 2010, Olay Aboneli\u011fi - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png\",\"datePublished\":\"2010-12-26T15:50:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png\",\"width\":209,\"height\":208},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Team Foundation Server 2010, Olay Aboneli\u011fi\"}]},{\"@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":"Team Foundation Server 2010, Olay Aboneli\u011fi - 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\/tfs2010-olay-aboneligi\/","og_locale":"en_US","og_type":"article","og_title":"Team Foundation Server 2010, Olay Aboneli\u011fi - Fatih Boy","og_description":"&nbsp;&nbsp; Microsoft Team Foundation Server, tasar\u0131m olarak pek \u00e7ok noktada bizlere sundu\u011fu \u00f6zellikleri kullanarak yeni \u00f6zellikler sunmam\u0131z\u0131 sa\u011flamak amac\u0131yla esnek ve geni\u015fletilebilir olarak tasarlanm\u0131\u015ft\u0131r. Bu esneklikler aras\u0131nda belki de en \u00f6nemlilerinden birisi olay bildirimleridir. Yap\u0131land\u0131rma y\u00f6netimi (configuration management), kaynak kodu kontrol\u00fc (source control), i\u015f kalemi takibi (work item tracking), t\u00fcmle\u015fik entegrasyon (continuous Integration) gibi pek...Read More","og_url":"https:\/\/fatihboy.com\/en\/tfs2010-olay-aboneligi\/","og_site_name":"Fatih Boy","article_published_time":"2010-12-26T15:50:37+00:00","og_image":[{"width":209,"height":208,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_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\/tfs2010-olay-aboneligi\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"Team Foundation Server 2010, Olay Aboneli\u011fi","datePublished":"2010-12-26T15:50:37+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/"},"wordCount":1466,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png","keywords":["Team Foundation Server"],"articleSection":["Team Foundation Server","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/","url":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/","name":"Team Foundation Server 2010, Olay Aboneli\u011fi - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png","datePublished":"2010-12-26T15:50:37+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/12\/tfs_events_thumb.png","width":209,"height":208},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/tfs2010-olay-aboneligi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"Team Foundation Server 2010, Olay Aboneli\u011fi"}]},{"@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\/33092","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=33092"}],"version-history":[{"count":0,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33092\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/8570"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}