Makale Özeti

Team Foundation Server’a Visual Studio ile bağlanmak için genellikle Team Explorer aracını kullanılır. Team Explorer TFS’e erişmek için Team Foundation nesne modelini kullanan bir istemci uygulamasından başka bir şey değildir. Team Explorer’in da kullandığı bu nesne modeli “Team Foundation Server Object Model” .net kütüphanelerinden oluşan ve üçüncü parti yazılımların da kullanımını açık bir uygulama geliştirme arayüzüdür.

Makale

Team Foundation Server Nesne Modeli  

 

Team Foundation Server’a Visual Studio ile bağlanmak için genellikle Team Explorer aracını kullanılır. Team Explorer TFS’e erişmek için Team Foundation nesne modelini kullanan bir istemci uygulamasından başka bir şey değildir. Team Explorer’in da kullandığı bu nesne modeli  “Team Foundation Server Object Model” .net kütüphanelerinden oluşan ve üçüncü parti yazılımların da kullanımını açık bir uygulama geliştirme arayüzüdür.

Team Foundation Nesne Modeli

Team Foundation Nesne Modelini oluşturan assembly dosyaları <sürücü>:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies klasörü altında bulunmaktadır.

Nesne modeli üzerinden bir işlem gerçekleştirilmek istendiğinde nesne modeli implementasyonu arka planda “Team Foundation Services” olarak genel bir ad altında toplanmış olan Team Foundation Server’in web servislerini kullanılır. Team Foundation Services web servisleri ise en son olarak arkaplanda sql server veritabanı üzerinde host edilmekte olan veriye ulaşmaktadır.

 

Team Foundation Server uygulama geliştirme arayüzü alt yapı katmanları

 

Team Foundation Services adındaki web servisleri Team Foundation Server’in kurulu olduğu işletim sistemi üzerinde Internet Information Services Manager aracılığı ile gözlemlenebilmektedir. Team Foundation Server tüm hizmetlerini IIS üzerinde host ettiği bu web servisleri ile vermektedir. Yani Team Foundation Server IIS üzerinde host edilmektedir diye özetleyebiliriz.

 

Team Foundation Nesne Modeli ile neler yapılabilir?

Team Foundation Server’in  Version Control nesne modeline, Work Item Tracking nesne modeline, Team Build nesne modeline, Team Foundation Data Warehouse nesne modeline ve sistem genel bilgilerine(Team Foundation Server Core Services) erişilebilecek nesne modellerine TFS Nesne modeli kütüphaneleri ile erişilebilmektedir.

Team Foundation Server Nesne Modeli ile ilk uygulama

1.       Yeni bir Windows Forms Application projesi oluşturun.

2.       <sürücü>:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies  klasörü altından Microsoft.TeamFoundation.Client.dll ve Microsoft.TeamFoundation.dll dosyalarını referans olarak ekleyin.

3.       Aşağıdaki form tasarımını oluşturun.

 

Team Foundation Server’a bağlanmak için Microsoft.TeamFoundation.Client.TeamFoundationServer sınıfı kullanılır. Bu türden bir nesne oluşturmak için TeamFoundationServer sınıfının string parametre alan constructor overlodu kullanılabilir ancak bunun yerine TeamFoundationServerFactory sınıfının GetServer metodunu kullanmak performans açısından tavsiye edilir.

using System;

using System.Windows.Forms;

using Microsoft.TeamFoundation;

using Microsoft.TeamFoundation.Client;

 

namespace TFSOM1

{

    public partial class Form1 : Form

    {

        TeamFoundationServer tfsServer = null;

        public Form1()

        {

            InitializeComponent();

        }

        private void btnConnect_Click(object sender, EventArgs e)

        {

            //tfsServer = new TeamFoundationServer(txtTFSServerName.Text);

            tfsServer = TeamFoundationServerFactory.GetServer(txtTFSServerName.Text); //performans için bu tercih edilmelidir.

            this.txtInfo.Clear();

            writeInfo("AuthenticatedUserDisplayName", tfsServer.AuthenticatedUserDisplayName);

            writeInfo("ClientCacheDirectoryForInstance", tfsServer.ClientCacheDirectoryForInstance);

            writeInfo("Culture", tfsServer.Culture);

            writeInfo("HasAuthenticated", tfsServer.HasAuthenticated);

            writeInfo("InstanceId", tfsServer.InstanceId);

            writeInfo("Name", tfsServer.Name);

            writeInfo("TimeZone", tfsServer.TimeZone.StandardName);

            writeInfo("URI", tfsServer.Uri);

        }

        private void writeInfo(string propertyName, object value)

        {

            txtInfo.Text += (string.Format("{0:20} - {1}", propertyName, value.ToString()));

            txtInfo.Text += "\r\n";

        }

    }

}

 

Uygulamanın çıktısı aşağıdaki gibi gözükmektedir.

 

Yukarıdaki örnekte gözüktüğü gibi Team Foundation Server  core servislerine teamfoundationserver sınıfı ile erişebiliyoruz.

Ancak TFS nesne modeli ile erişebileceğimizden bahsettiğimiz diğer servislere erişmekte için GetService metodu kullanılır.

GetService metodu istenilen servisin type’ini alır ve geriye o servisin üzerinde işlem yapabileceğimiz nesnesini döner.

GetService ile elde edilebilecek servis listesi.

Service Tipi

Açıklaması

IAuthorizationService

Güvenlik ile ilgili işlemler yapılır.

ICommonStructureService

Proje ve alt nodeları gibi sınıflandırma işlemleri yapılır.

IEventService

Eventing mekanizması ile ilgili işlemler yapılır. Yani bir eylem gerçekleştiğinde şu işler yapılsın gibi tanımlamaları yapmak için uygun arayüzdür.

IGroupSecurityService

Güvenlikte gruplama gibi işlemler.

ILinking

Linkin servisi ile ilgili işlemler.

IProcessTemplates

Team Foundation Server process templateleri ile ilgili işlemler.

IRegistration

Registration verilerine erişmek için kullanılır.

IServerStatusService

Team Foundation Server durumunu almak  için kullanılır.

VersionControlServer

Version Control sistemi ile ilgili işlemler yapılır.

WorkItemStore

Work Item Tracking sistemi ile ilgili işlemler yapılır.

 

GetService metodu kullanımı

GetService metodu ile IServerStatusService nesne modeline erişerek server durumu ile ilgili bilgi almaya çalışalım. Bunun için aynı forma bir buton ekleyin ve adını btnServerStatus yapın. Butonun click eventine aşağıdaki kod yazın.

private void btnServerStatus_Click(object sender, EventArgs e)

{

    tfsServer = TeamFoundationServerFactory.GetServer(txtTFSServerName.Text);

    this.txtInfo.Clear();

    IServerStatusService statusService = (IServerStatusService)tfsServer.GetService(typeof(IServerStatusService));

    DataChanged[] statusResults = statusService.GetServerStatus();

    foreach (DataChanged statusResult in statusResults)

    {

        writeInfo("LastModified", statusResult.LastModified);

        writeInfo("DataType", statusResult.DataType);

    }

}

 

Yukarıdaki kod bloğunda IServerStatusService arayüzünün type’ının GetService metoduna parametre olarak vererek geriye IServerStatusService interfaceini implemente eden Microsoft.TeamFoundation.Proxy.ServerStatusService türünde bir nesne döner. Bu metodun dönüş türü object olduğu için açıkca IServerStatusService tipine cast ederek dönüş nesnesini bir değişkene (statusService) alıyoruz. Artık statusService değişkenin gösterdiği nesnenin üzerindeki GetServerStatus metodu ile server durum bilgisini alabiliriz. Geriye dönen sonuç aşağıdaki ekran görüntüsünde gözükmektedir.

Team Foundation Server nesne modeli ile erişebileceğimiz diğer servisler ve hangi amaçlar doğrultusunda kullanılabileceklerini anlatacağım diğer makalelerim devam edecek. Örneğin WorkItemStore ile nasıl work itemlara erişebiliriz neler yapabiliriz sonraki makalelerimde bunları anlatıyor olacağım.