[PL] Webserwisy w TFS 2008

Webserwisy w TFS nie są udokumentowane. Microsoft zaleca aby w własnych aplikacjach rozszerzających TFS wykorzystywać Client SDK, stąd taka decyzja. 

Ciekawość wiadomo, pierwszy stopień do piekła, natomiast czasem wygrywa. W jednej sprawie nie znalazłem innej metody niż invoke na Webserwisie i ten przykład podaję poniżej:

Raporty nie odzwierciedlają aktualnych danych. Spowodowane jest to tym, iż hurtowania danych wykorzystywana w raportach jest aktualizowana okresowo (raz na godzinę). Jestem niecierpliwy i mam swoje tysiące powodów aby przyspieszyć sprawę.

Szybko sprawdzam, że do mojego raportu brakuje paru zadań (workitems) w hurtowni, zapytanie poniżej:

select t.* from
(
select * FROM TfsWorkItemTracking.dbo.WorkItemsLatest as wil
union all
select * FROM TfsWorkItemTracking.dbo.WorkItemsWere as wiw
) as t
left join TfsWarehouse.dbo.[Work Item History] as wh on
CAST(CAST(wh.[Logical Tracking Id] AS UniqueIdentifier) AS Binary(16)) = t.[Changed Order]
AND wh.[Revision Count] = 1
where wh.[Work Item] is null order by id, rev

Oczekuję pustego wyniku, a jednak mam dane. Co dalej? Poniższy webserwis pomaga w sprawie:
https://<TFS Instance>:8080/warehouse/v1.0/warehousecontroller.asmx

Tam są dwie metody istotne z punktu widzenia powyższej sprawy:

Run – manualne uruchomienie wszystkich adapterów, Zwraca true/false w zależności od poprawności wykonania.
Aby sprawdzić aktualny status przetwarzania należy wykonać drugą metodę z tego samego serwisu:

GetWarehouseStatus – ta metoda zwraca poniższego enuma:

<GetWarehouseStatusResult>Idle or ProcessingOlap or RunningAdapters or Blocked</GetWarehouseStatusResult>
Jeśli jest Idle, to oznacza, że praca została zakończona.

To jeden przykład. Webserwisów jest wiele, i jak wspomniałem są praktycznie w ogóle nieudokumentowane.

Manualne przejrzenie zasobów IIS lub “tree /f” na folderze instalacyjnym TFS pozwoliło mi na skonstruowanie małej ściągi wszystkich dostępnych serwisów w TFS 2008:

C:<TFS Folder>\Web Services\*
│  
├───Build
│   │              
│   ├───V1.0
│   │       BuildController.asmx
│   │       BuildStore.asmx
│   │       Integration.asmx
│   │       PublishTestResultsBuildService.asmx
│   │       PublishTestResultsBuildService2.asmx
│   │      
│   └───V2.0
│           BuildService.asmx
│           Integration.asmx
│              
├───Services
│   │          
│   ├───v1.0
│   │       AuthorizationService.asmx
│   │       CommonStructureService.asmx
│   │       EventService.asmx
│   │       GroupSecurityService.asmx
│   │       ProcessTemplate.asmx
│   │       projectMaintenance.asmx
│   │       Registration.asmx
│   │       ServerStatus.asmx
│   │          
│   └───v2.0
│           GroupSecurityService2.asmx
│          
├───VersionControl
│   └───v1.0
│           Administration.asmx
│           Integration.asmx
│           ProxyStatistics.asmx
│           Repository.asmx
│              
├───Warehouse
│   │          
│   └───v1.0
│          warehousecontroller.asmx
│          
└───WorkItemTracking
    │      
    └───v1.0
            ClientService.asmx
            ConfigurationSettingsService.asmx
            ExternalServices.asmx
            Integration.asmx
            SyncEventsListener.asmx

Jak wspomniałem wyżej, Microsoft nie zaleca odwoływania się do webserwisów bezpośrednio i wszelkie aplikacje rozszerzające TFS z tego pułapu nie są przez MS wspierane, natomiast jak wspomniałem, człowiek młody to i ciekawy. Wersje 2.0 obecne są tylko w TFS 2008, v1 są też w starszej wersji. W TFS 2008 zostały pozostawione tylko dla kompatybilności wstecz.

Technorati Tagi: Polish posts,Visual Studio Team System,coding