Komfortabler Dateimanager mit vielen Funktionen

TFS: Warehouse-Aktualisierung

By Sven on 25.08.2008 - 10:00 in Kleine Tools, TFS

Die TfsWarehouse-Datenbank enthält alle wichtigen Daten, die für die Generierung und Anzeige von Berichten nötig sind. Die Informationen stammen aus den operationalen Datenbanken (z.B. Arbeitsaufgaben, Versionskontrolle), sie werden durch den Warehouse-Webservice in die TfsWarehouse-Datenbank übertragen. Der TFSServerScheduler-Dienst sorgt dafür, dass dies stündlich geschieht. Allerdings läuft der Dienst wie berichtet nur auf einem an eine Domäne angeschlossenen Server.

Als Abhilfe habe ich mir ein kleines Programm geschrieben, welches die Aktualisierung der TfsWarehouse-Datenbank durch den Webservice anstößt. In Verbindung mit der Windows-Aufgabenplanung kann dies je nach Bedarf stündlich, täglich oder in anderen gewünschten Abständen geschehen. Optimaler wäre natürlich ein eigener Dienst, aber so schwer wollte ich es mir dann auch nicht machen.

// ****************************************************************************
// ******                     Implementation zu wWinMain                 ******
// ****************************************************************************
int APIENTRY wWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpCmdLine*/, int /*nCmdShow*/)
{
    // Internet-Session oeffnen
    HINTERNET hSession = WinHttpOpen(NULL, WINHTTP_ACCESS_TYPE_NO_PROXY, NULL, NULL, 0);
    if (NULL != hSession)
    {
        // Verbindung herstellen
        HINTERNET hConnect = WinHttpConnect(hSession, L"localhost", 8080, 0);
        if (NULL != hConnect)
        {
            // Anforderung erstellen
            HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"POST", L"/Warehouse/v1.0/warehousecontroller.asmx/Run", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
            if (NULL != hRequest)
            {
                // Anforderung senden
                BOOL fResult = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);

                // Anforderung wurde gesendet
                if (fResult && WinHttpReceiveResponse(hRequest, NULL))
                {
                    // Antwort abfragen
                    char szResponse[2048] = { 0 }; DWORD dwBytesRead = 0;
                    WinHttpReadData(hRequest, szResponse, 2048, &dwBytesRead);
                }

                // Anforderung schliessen
                WinHttpCloseHandle(hRequest);
            }

            // Verbindung schliessen
            WinHttpCloseHandle(hConnect);
        }

        // Session freigeben
        WinHttpCloseHandle(hSession);
    }

    // Ans kloar
    return 0;
}

Es wird einfach nur eine Url aufgerufen und die Antwort abgefragt, auf eine Fehlerausgabe habe ich verzichtet. Das kompilierte Programm könnt ihr hier herunterladen.

Es können keine Kommentare abgegeben werden.

Top