Visualizzazione risultati 1 fino 5 di 5

Discussione: WSDL e default_socket_timeout o max_execution_time

  1. #1
    Guest

    Predefinito WSDL e default_socket_timeout o max_execution_time

    Il problema è il seguente:
    Si effettua una connessione soap al web service con uno schema di un wsdl, il wsdl in base all'array di variabili in entrata da diverse risposte in base alle operation response Data ed anche alle fault, quindi dato che la chiamata ovviamente avviene tramite Ajax il php risponde ad Ajax in base a come risponde il wsdl quindi sia nel php che nell'Ajax ci sono i prin e gli IF in base alla risposta del wsdl...per esempio il wsdl risponde cliente trovato e ti da i dati, oppure cliente non trovato e ti da la stringa di fault, oppure cliente con sinonimi e ti da i sinonimi etc...etc...Fin qui tutto bene, per farvi capire la struttura, in base alle risposte del wsdl dal php ad ajax viene poi valorizzato tutto l'html di conseguenza...Adesso il punto qual'è? non è detto che il wsdl risponda sempre entro pochi millisencondi, se ci sono dei problemi di qualsiasi genere con il web service di solito PHP mette il default timeout a 30 secondi, adesso io posso accorciare mettendo

    Codice PHP:

    ini_set
    ("default_socket_timeout", 5);
    Ma non va bene, cioè io devo dire al PHP esegui il codice se entro 5 secondi hai una risposta mi deve printare ovviamente la risposta ma se non hai risposta entro 5 secondi mi deve printare per esempio KOTIMEOUT in modo che io poi in Ajax possa gestire e forzare se il wsdl ci mette tempo a rispondere....Come glielo dico come sviluppo il codice?
    Ho provato sia mettendo l'if ('max_execution_time', 5) printa KO e non va sia se metto $parti=microtime(true) e poi $fine=microtime(true) e elapsed time e non va....O lo sbaglio a scrivere o non so come impostarlo...Se lo script ci mette più di 5 secondi si deve interrompere e deve entrare in un IF nel PHP che deve rispondere ad Ajax KOTIME...Non posso metterlo nella connessione, perchè la connessione c'è, devo metterlo proprio nel tempo di esecuzione di tutto lo script, cioè nel tempo che il web service ci mette a rispondere...Qualcuno ha qualche idea?

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,434

    Predefinito

    Non puoi controllare il timeout tramite il "timeout" della chiamata ajax e gestire l'errore in js (ed eventualmente fare una nuova chiamata)? Impostando magari anche max_execution_time sempre allo stesso valore così non occupi risorse server inutilmente.

    Ciao!

  3. #3
    Guest

    Predefinito

    Ahh tu dici invece di farmi rispondere il timeout dal PHP gestirlo dall'Ajax dentro la chiamata con un timeout??Si posso provare a fare così...Non devo rifarla poi la chiamata cioè è la gestione di un caso limite capito?Perchè comunque deve rispondere il web service però se per qualsiasi problema non risponde bisogna comunque che io gestisca la chiamata...Se non risponde io forzo le input di risposta con dei valori di default senza stare a richiamare(in poche parole lo faccio proseguire nel lavoro...)....Ok domani provo a fare così..Grazie ti faccio sapere...ciao buona serata...
    Ps:Auguri

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,434

    Predefinito

    Sì. Auguroni anche a te, fammi sapere! :)

    Ciao!

  5. #5
    Guest

    Predefinito

    Ho risolto prendendo in esempio la risposta di questo utente in stackoverflow

    http://stackoverflow.com/questions/1...-error-handler

    Però vedi lui mette un microtime nella connessione io invece ho bisogno del microtime nella risposta delle operation quindi in poche parole ho inserito nel try catch non della connessione ma della chiamata alla operation questo:


    Codice PHP:
    $datiRisposta = "DatiRead";

    try {
    $inizio = microtime(true);
    // chiamiamo l'operazione e gli passiamo i parametri
    $rispostaRichiestaOperazione = $connessione->__soapCall($operazioneRichiesta, array("datiRisposta" => $datiRisposta));
    }catch (
    SoapFault $fault){
    $tempoRichiesto = (microtime(true)-$inizio);

    if(
    $tempoRichiesto > 0.8){//Se abbasso il tempo va in KOtime mentre da 0.8 in poi prosegue...perfettoooo
    print 'KOTime';
    exit;
    }

    //continuo del codice con i vari print delle fault della operation datiRead
    //...............
    }

    //Inserisco il limite che imposto esempio a 0.5 anche fuori dal catch perchè se non entra nel catch, quindi la chiamata trova
    //clienti e la risposta è OK va gestito anche qui il tempo....
    $tempoRichiesto = (microtime(true)-$inizio);
    if(
    $tempoRichiesto > 0.5){
    print
    'KOTime';
    exit;
    }
    Funziona ho fatto delle prova, questa mattina il web service risponde nel giro di qualche millisecondo ma se abbasso il tempo e metto 0.002 mi printa KOTime...perfetto un microtime che parte nel try e continua nel catch mentre alla fine calcolo il tempo che il parse ci mette ad eseguire il tutto...
    Ciao
    Ultima modifica di fractalcosmo : 22-12-2015 alle ore 11.47.37

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •