Timout bei GetHttpConnection



  • Hallo ich habe ein Problem mit dem Übersenden von Daten an einen Webserver.
    Genauer gesagt muss ich in einer Schleife mehrfach an den Webserver ein
    paar Dinge schicken, jedoch wird nach der 4ten Übertragung plötzlich die
    Info ausgegeben:

    "Das Zeitlimit für den Vorgang wurde erreicht."

    Es scheint wohl so eine Art Timeout zu sein oder? Wie kann ich den höher
    setzen?

    Hier mal mein Code in Auszügen, ohne den unnötigen Krempel:

    pConnection = session.GetHttpConnection(_T(ip),(INTERNET_PORT)port,user,pwd);   
    pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("/cgi-bin/xyzusw"));
    
    CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
    CString strFormData = "";
    
    int runs=7;//anzahl einträge in listcontrol die durchlaufen werden...
    for(int i=runs;i>0;i--)
    {
    
    strFormData=xyz;
    strFormData+=bla;//dieser teil variiert und muss in 7 Durchläufen jeweils
    //übergeben werden
    
    BOOL result;
    result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength()); 
    
    if(result!=0)//alles ok
    {
    	//m_list1.DeleteItem(0);
    
    	MessageBox(strFormData,"sendebefehl war OK!");
    }else
    {
    	MessageBox(strFormData,"fehler beim senden!!!",MB_ICONWARNING);
    
    }
    
    }
    
    session.Close();
    


  • Ist es überhaupt richtig, dass ich GetHttpConnection sowie OpenRequest
    mehrfach verwende|offen lasse (für den Schleifendurchlauf), oder müsste ich nach jedem
    SendRequest alles aufräumen und die Verbindung komplett neu herstellen?
    Ich meine es gestern abend getestet zu haben, lief dann aber irgendwann auf
    "ungültiges Handle". Bei meinem session.Close() bin ich mir auch nicht sicher,
    ob das überhaupt zum "äufräumen" reicht...

    Inzwischen habe ich auch noch etwas gelesen, wo man vorschlug nur den Aufruf
    für SendRequest in einen Thread zu packen. Den Sinn dahinter was das in
    Bezug auf den Timeout soll, habe ich aber nicht begriffen.
    Was soll der Thread daran ändern können 😕

    Ich hoffe der eine oder andere hat doch noch Zeit hier mal seine Ideen
    zu posten 👍



  • Hallo, sorry dass ich es nochmal pushe, ich würde nur gerne einen Weg um
    "Das Zeitlimit für den Vorgang wurde erreicht." finden.

    Hier nochmal mein ganzer Code evtl. findet jemand den Fehler 😞

    Klassenvariablen:

    CHttpConnection *pConnection;
    CHttpFile *pFile;
    CInternetSession session;
    CString strFormData;
    CString strHeaders;
    

    Der Aufruf (liest URL's aus einem ListControl):

    void Pushdownload::OnBnClickedButton2()
    {
    
    CString server,user,pwd;
    int prt = 8080;
    server ="192.168.100.1";
    user="root";
    pwd="masterpwd";
    
    connectNas(prt,server,user,pwd);
    
    int items =	m_list1.GetItemCount();
    items--;
    
    while (items>0)
    {
    items--;
    
    strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
    strFormData="url=";
    strFormData+=m_list1.GetItemText(items,0);
    strFormData+="&save=%2FBupFolder";
    
    BOOL result;
    result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength()); 
    }
    
    session.Close();
    
    }
    

    Zum Verbinden (wird einmalig gerufen):

    void Pushdownload::connectNas(int port, CString ip, CString user, CString pwd)
    {
    
    pConnection = NULL;
    pFile=NULL;
    pConnection = session.GetHttpConnection(_T(ip),(INTERNET_PORT)port,user,pwd);   
    pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("/cgi-bin/working.cgi?todo=addentry"));
    
    }
    

    Es laufen immer die ersten 4 URL's durch, dann hängt das Programm kurz und ich bekomme den Hinweis, dass das Zeitlimit erreicht wurde.
    Welches Zeitlimit? Die Verbindung steht doch und es wird nur halt mehrfach SendRequest mit unterschiedlichen Daten gerufen...

    Ich verstehe es nicht 😞


Anmelden zum Antworten