2010-07-31 4 views
1

J'ai créé un service Datasnap, en utilisant le livre blanc de Bob Swart comme guide. J'ai débogué et déployé avec succès en utilisant l'application Fiches VCL en tant que serveur. Mais quand j'essaye de déployer la version de service, elle installe bien, j'essaye alors de commencer le service et il s'arrête immédiatement. L'erreur dans le journal des événements suggère que le port est déjà utilisé, j'ai essayé différents numéros de port pour TCPServerTransport et HTTPService sans joie. Le DSServer n'est pas défini sur Autostart car je souhaite définir le numéro de port à partir d'un fichier de configuration. Le message d'erreur affiché dans le journal des événements est:Échec de l'application Datasnap Service

Le service a échoué au démarrage: Impossible de lier le socket. Adresse et le port sont déjà utilisés ..

J'ai également essayé d'écrire dans un fichier journal au démarrage et à l'exécution, mais il semble que ce n'est pas le cas.

Solution nécessaire dès que possible, avant que je dois revenir à un client lourd que je ne veux pas vraiment faire.

Merci

Répondre

1

Tout d'abord, obtenez une copie de TCPView de la suite Sysinternals (maintenant exécutée par Microsoft) et utilisez-la pour surveiller quelle application utilise le port que vous souhaitez utiliser.

Je risque de deviner que si l'application fonctionne correctement (comme vous le dites) et que vous essayez d'utiliser le même port dans le service, l'application de service ouvre peut-être le port au démarrage sans que vous le réalisiez et lorsque vous essayez d'ouvrir le port manuellement, l'application le trouve déjà utilisé. Ou en quelque sorte l'application essaie d'ouvrir le port deux fois. La première fois est réussie mais, peut-être en raison d'un événement ou d'un chemin de code inattendu, l'application essaie de l'ouvrir une deuxième fois et échoue. TCPView aidera à repérer cela.

+0

+1 pour "l'application essaie de l'ouvrir une seconde fois et échoue". Netstat seul peut être utilisé pour vérifier les ports ouverts. –

+0

C'est vrai, mais TCPView est tellement pratique en lui-même - et vous n'avez pas besoin de vous souvenir des paramètres de la ligne de commande :-) Plus une vue 'live'/pourrait/être plus utile dans cette situation. – shunty

+0

Cela résolu, il semble que le problème était d'avoir le projet ouvert dans l'IDE. Le serveur DSServer n'a pas été configuré sur Autostart mais je suppose que je continuais à développer et à tester le côté serveur de l'application. J'ai recompilé en remettant le code pour l'événement de début et ai alors assuré que j'ai fermé le projet dans l'EDI avant de commencer le service. Tout a fonctionné avec succès, les doigts croisés pour le déploiement sur mon serveur de test! Merci :) – Matt

1

Si vous êtes sûr que le port que vous avez configuré est effectivement libre et non utilisé par tout autre logiciel sur la machine, alors il pourrait y avoir un logiciel anti-virus/sécurité en cours d'exécution qui bloque tout logiciel d'écoute sur des ports spécifiques ou sur n'importe quel port à l'exception de quelques uns configurés. Le message que vous recevez pourrait être l'un des symptômes de la façon dont le logiciel anti-virus/sécurité gère les tentatives des applications pour commencer à écouter sur un port.

+0

S'il s'agit de l'anti-virus ou du pare-feu, il doit également faire face au même problème dans son application de formulaire VCL. – vcldeveloper

+0

@vcldeveloper: vous avez raison d'utiliser les deux applications sur la même machine. Le mot «déployer» m'a fait penser qu'il pourrait essayer de déployer la version de service sur un autre. –

Questions connexes