Cache leeren nach Abfrage von Webservice



  • Guten Morgen zusammen,

    ich habe folgendes Problem.
    Ich frage via CInternetSession und CHttpFile Daten von einem Webservice ab.

    CInternetSession mySession("mysession");
    CHttpFile* pFile = static_cast<CHttpFile*>(mySession.OpenURL(sUrl.c_str());
    DWORD dwRet = 0;
    pFile->QueryInfoStatusCode(dwRet);
    if(dwRet == 200)
    {
       char szBuf[5000];
       ZeroMemory(szBuf, sizeof(szBuf));
       //...Daten verarbeiten, kommen in XML Form zurück ...
       pFile->Close();
       delete pFile;
       pFile =  NULL;
       mySession.Close();
    }
    

    Nachdem ich über einen anderen WebService neue Daten hinzugefügt habe stelle ich die Anfrage erneut, bekomme aber die alten Daten zurück.
    Kopiere ich den Link meiner Abfrage in den Browser bekomme ich die neusten Daten zurück. Stelle ich nun meine Abfrage nochmal dann bekomme ich ebenso wie beim Neustart die neusten Daten zurück.
    Sprich meine erstes Abfrageergebnis scheint im Cache zu landen.
    Meine Frage nun wie leere ich den Cache nach jeder verarbeiteten Anfrage?

    Gruß

    Karsten



  • Ok wenn ich zum lesen der Rückgabe Read benutze dann klappt es mit den aktuellen Werten. Da ich aber nie weiß wie groß mein Buffer am Ende sein wird(jetzt schon fast 10480 bytes) hab ich gedacht nimm ReadString dann biste flexibel.
    Aber Pustekuchen mit ReadString hab ich wieder mein ursprüngliches Problem.
    Ist doch zum k..... 😡



  • Kannst du mir mal bitte das hier erklaeren:

    CrazyPlaya schrieb:

    delete pFile;
       pFile =  NULL;
    

    Wieso loeschst du pFile und setzt es dann nochmal auf NULL ?

    Zum Thema: Gibt's da keine EOF-Abfrage? Weil normalerweise wird sowas mit

    OpenStream(Param);
    while(!EOF)
    {
        ReadBuffer (
            Buffer,
            sizeof(Buffer)
        );
    }
    CloseStream();
    

    geloest. Also so in der Form kenne ich das jedenfalls.



  • Ok mein Fehler.
    Hatte die Schleife erst so aus einem Beispiel übernommen

    while(pFile->Read(szBuf,nCount) != -1)
    

    Ist dadurch auf eine Endlosschleife gelaufen
    richtiger wäre die Abfrage gewesen mit (> 0) dann klappt es
    auch.

    Löschen von pFile und NULLEN dieses Pointers mach ich da ich
    kein Garbage Collection habe und der Speicher nmuss ja freigemacht werden.
    Obwohl er ja eigentlich mit Session.Close() auch wieder freigegeben werden müsste.
    Aber sicher ist sicher.
    Ich brauch Session und pFile nach der Abfrage nicht mehr und
    bei einer erneuten Abfrage wird eh alles erneut aufgerufen.

    Allerdings bleibt das Problem dennoch bestehen das mir die neusten Daten nicht übergeben werden 😕


Anmelden zum Antworten