Question

J'ai besoin d'un serveur HTTP local pour mon test unitaire.

Lorsque j'essaie d'activer TIdHTTPServer à SetUp, il échoue avec le message EThread :

"Erreur de discussion :descripteur non valide (6)"

Voici comment je l'initialise :

type
  TestMyUnit = class(TTestCase)
...
procedure TestMyUnit.SetUp;
begin
  FServer := TIdHTTPServer.Create(nil);
  FServer.OnCommandGet := HTTPServerCommandGet;
  FServer.Active := True;   // <---- This will cause error
end;

Peut-être existe-t-il certaines restrictions lors de l'utilisation du TIdHTTPServer d'Indy avec le framework DUnit ?

  • Delphes 2010
  • Indy10

Une exception a été levée quelque part après cette ligne dans TIdListenerThread.Run proc (unité IdCustomTCPServer)

LIOHandler := Server.IOHandler.Accept(Binding, Self, LYarn);

Cependant, je ne peux pas le retrouver plus profondément, je ne sais pas pourquoi.

Était-ce utile?

La solution 2

Résolu.J'ai mon propre DPK avec des composants auto-conçus (utilisés par ce test unitaire), et il y avait 1 unité avec des références à Indy.Après avoir reconstruit ce package, le compilateur m'a proposé d'ajouter une nouvelle DCCReference aux composants Indy.Après avoir réinstallé mon package, cette erreur dans le test unitaire a disparu.

Je ne peux pas imaginer les relations de cause à effet, mais maintenant ça va.

Autres conseils

Vous devrez peut-être autoriser votre exécutable DUnit à ouvrir le port dans la configuration de votre pare-feu...Panneau de configuration > Pare-feu Windows > Paramètres avancés > Règles entrantes.

Habituellement, Windows vous le demandera la première fois que l'exécutable essaie d'ouvrir le port, mais je vérifierais de toute façon qu'il existe une règle.

Modifier:

Ajoutez simplement un peu plus d'informations, l'erreur "Descripteur non valide" ressemble à une erreur Winsock et pourrait être due au fait que votre code ne peut pas ouvrir le port.Cela peut être dû au fait qu'il est bloqué au niveau du pare-feu (comme je l'ai mentionné ci-dessus) ou il se peut que vous ayez un autre programme sur lequel ce port est ouvert...Comme IIS peut-être ?Je choisirais un port supérieur à 1024 quelque part et configurerais votre serveur Web pour qu'il l'utilise (et évidemment votre client).

Modifier 2 :

Mon code pour configurer mon TIdHttpServer est :

FServer := TIdHttpServer.Create(nil);
FServer.DefaultPort := 7777;
FServer.AutoStartSession := True;
FServer.OnCommandGet := ServerCommandGet;
FServer.OnCreatePostStream := ServerCreatePostStream;

FServer.Active := True;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top