Avatar billede kroning Nybegynder
23. august 2008 - 18:53 Der er 13 kommentarer og
1 løsning

Problem med indy IdHttp

Jeg har lavet en service (php) som jeg kalder med indys IdHttp således:

var
  Post, Svar : TStringList
.
.

  try
    IdHTTP.ReadTimeout:=3000;
    Svar.Text:=IdHTTP.Post('http://domæne/minservice.php', Post);
  except
    Result:='NC';
  end;

Men den fejler en gang i mellem dvs. jeg får Result:='NC';
Nogle ideer?

Jeg bruger Delph 7 og Indy 10.1.5
Avatar billede wanze Nybegynder
23. august 2008 - 19:02 #1
Problemet består vel bare i, at den ikke kan forbinde til webserveren eller at det tager mere end de tre sekunder. Det er der vel ikke så meget at gøre ved, udover at prøve igen eller sætte timeouttiden op.
Avatar billede spil2vind Nybegynder
23. august 2008 - 19:10 #2
Hvis din kode virker normalt, må det vel være fordi din udbyder service ikke kører, og du bør derfor melde dette til din udbyder, jeg havde lidt samme problem for 6 måneder siden og det skyldtes formentlig en ustabil server
Avatar billede kroning Nybegynder
23. august 2008 - 19:58 #3
php filen kører på min egen server og jeg har klaget til mig selv.
Men problemet er jo at jeg ikke ved om servicen har modtaget det der er sendt og at det måske kun er svaret fra servicen der ikke kommer retur.
Avatar billede spil2vind Nybegynder
23. august 2008 - 20:55 #4
Der må stå noget i IIS logen, da det må IIS'en der ikke får det svar du ønsker, for ellers ville den jo sende det korrekte svar til dig på IdHTTP.post(URL,post)
Avatar billede arne_v Ekspert
23. august 2008 - 22:29 #5
Du kunne da starte med at udskrive hvilken fejl server sende.

Eksempel med GET:

  con := TIdHTTP.Create;
  try
    Edit1.Text := con.Get('http://arne/notexist.html');
  except
    Edit1.Text := con.ResponseText;
  end;
Avatar billede kroning Nybegynder
26. august 2008 - 12:34 #6
Jeg har lavet en opdatering og sendt ud, nu venter jeg så på at alle får opdateret og fejlmeldingerne begynder at komme retur.
Avatar billede kroning Nybegynder
01. september 2008 - 22:36 #7
Det har vist sig at være en alt for ustabil løsning, jeg får bla. følgende fejl:
EIdReadTimeout - Read Timeout
EIdHTTPProtocolException
EIdSocketError - Socket Error

De fleste fejl er Read Timeout. Nogen gange har serveren modtaget forespørgelsen og andre gange har den ikke.

Jeg finder på en anden løsning.

Smid nogle svar.
Avatar billede arne_v Ekspert
01. september 2008 - 23:05 #8
De fejl lyder ret midlertidige af natur, så jeg tror at du skal satse på at lave din
PHP service idempotent og så lade client sende requests indtil de får et OK svar
tilbage.
Avatar billede kroning Nybegynder
01. september 2008 - 23:38 #9
Problemet er at klienten sender en request, servicen retter i databasen og sender OK retur, klient modtager ikke OK og sender så request igen hvorefter servicen igen retter i databasen, det kan blive noget rod.
Avatar billede arne_v Ekspert
02. september 2008 - 00:17 #10
Det er derfor jeg siger at du skal lave din PHP service idempotent. Enten naturligt
ved at den grundliggende database operation er det. Eller kunstigt ved at du checker
for om den er lavet før.
Avatar billede kroning Nybegynder
02. september 2008 - 00:51 #11
Jeg vidste ikke hvad idempotent betød, det gør jeg nu.
Jeg har testet Indy´s TCPServer 10 og fundet ud af at det er meget let at lave en løsning hvor alle forespørgelser og svar sendes via denne og på den måde undgå at have en port åben til MySQL hvilket var grunden til at jeg prøvede med en php service.
Forløbige test tyder også på at denne løsning ikke giver samme problemer med fejl og desuden er noget hurtigere når der skal overføres mange data.
Avatar billede arne_v Ekspert
28. oktober 2008 - 02:44 #12
Tid at få afsluttet her ?
Avatar billede kroning Nybegynder
28. oktober 2008 - 12:58 #13
Havde helt glemt dette ?, Jeg har lavet en anden løsning en TCP server.
Smid nogle svar tak.
Avatar billede arne_v Ekspert
28. oktober 2008 - 22:47 #14
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester