OVH Cloud OVH Cloud

PB avec IIS

2 réponses
Avatar
Badradine
Bonjour,

Alors, d'abord le contexte:

On a:

- sur n'importe quel station PC connectée à Internet, une appli Delphi
client d'un Web Service

- sur un serveur Web, un Web Service qui tourne (physiquement, une DLL
ISAPI).



Objectif du système: permettre le transfert de fichiers depuis le PC client

vers le serveur Web, et la récupération de fichiers du serveur Web vers le

PC client.



Nature du problème:

Pour atteindre l'objectif, on a implémenté à la fois dans l'application

cliente et dans la DLL ISAPI (le tout écrit en Delphi) une unité chargé de

compresser/décompresser des fichiers. Pour envoyer des fichiers vers le

Serveur Web, on compresse les fichiers dans une archive Zip temporaire, on

charge l'archive Zip dans un flux (TMemoryStream), on crypte le flux, et on

l'envoie au Web Service en l'enveloppant dans un attachement SOAP.

Le Web Service récupère l'attachement SOAP, charge son contenu dans un flux

(TMemoryStream), décrypte ce flux, sauvegarde le flux décrypté dans un

fichier temporaire (qui correspond donc à l'archive temporaire générée par

l'application cliente), et dézippe finalement l'archive ainsi générée dans

un répertoire donné du serveur Web.

Pour l'envoi de fichiers de l'application (et le PC) client(e) vers le

serveur Web, le problème survient au moment de la décompression de l'archive

temporaire générée sur le serveur Web. L'algo de cette étape tient en

quelques lignes de code mettant en oeuvre un composant Delphi de compression

(ZipTV, cf www.ziptv.com). L'exécution de ce code donne l'impression que

l'archive zip est vide (0 fichiers trouvés dans l'archive), alors que cette

même archive, ouvert avec Winzip, permet bien de retrouver les fichiers

envoyés par l'application cliente. Plus fort: le même algo, c-a-d les mêmes

quelques lignes de code, compilées non plus dans la DLL ISAPI mais dans un

exécutable autonome, réussissent cette fois-ci parfaitement la

décompression. Donc le même code, appelé dans une DLL ou dans un EXE, ne

poduit pas le même résultat.

Pour la récupération des fichiers, le problème est identique; c'est toujours

au niveau de la DLL ISAPI que l'anomalie survient, alors que le même code,

dans l'application cliente, gère parfaitement la compression/décompression

des fichiers...



So, help me please... : )

2 réponses

Avatar
jbongran
Badradine wrote:
Bonjour,

Alors, d'abord le contexte:

On a:

- sur n'importe quel station PC connectée à Internet, une appli Delphi
client d'un Web Service

- sur un serveur Web, un Web Service qui tourne (physiquement, une DLL
ISAPI).



Objectif du système: permettre le transfert de fichiers depuis le PC
client
vers le serveur Web, et la récupération de fichiers du serveur Web
vers le
PC client.



Nature du problème:

Pour atteindre l'objectif, on a implémenté à la fois dans
l'application
cliente et dans la DLL ISAPI (le tout écrit en Delphi) une unité
chargé de
compresser/décompresser des fichiers. Pour envoyer des fichiers vers
le
Serveur Web, on compresse les fichiers dans une archive Zip
temporaire, on
charge l'archive Zip dans un flux (TMemoryStream), on crypte le flux,
et on
l'envoie au Web Service en l'enveloppant dans un attachement SOAP.

Le Web Service récupère l'attachement SOAP, charge son contenu dans
un flux
(TMemoryStream), décrypte ce flux, sauvegarde le flux décrypté dans un

fichier temporaire (qui correspond donc à l'archive temporaire
générée par
l'application cliente), et dézippe finalement l'archive ainsi générée
dans
un répertoire donné du serveur Web.

Pour l'envoi de fichiers de l'application (et le PC) client(e) vers le

serveur Web, le problème survient au moment de la décompression de
l'archive
temporaire générée sur le serveur Web. L'algo de cette étape tient en

quelques lignes de code mettant en oeuvre un composant Delphi de
compression
(ZipTV, cf www.ziptv.com). L'exécution de ce code donne l'impression
que
l'archive zip est vide (0 fichiers trouvés dans l'archive), alors que
cette
même archive, ouvert avec Winzip, permet bien de retrouver les
fichiers
envoyés par l'application cliente. Plus fort: le même algo, c-a-d les
mêmes
quelques lignes de code, compilées non plus dans la DLL ISAPI mais
dans un
exécutable autonome, réussissent cette fois-ci parfaitement la

décompression. Donc le même code, appelé dans une DLL ou dans un EXE,
ne
poduit pas le même résultat.

Pour la récupération des fichiers, le problème est identique; c'est
toujours
au niveau de la DLL ISAPI que l'anomalie survient, alors que le même
code,
dans l'application cliente, gère parfaitement la
compression/décompression
des fichiers...



So, help me please... : )



Rien dans l'obervateur d'evènements ?
Un coup de filemeon montre un accès refusé lors du decompactage ?
Peut tu compiler ton code en tant que cgi (exe ou dll) pour voir ?
Avatar
Yanos El Guerilleros
>

Rien dans l'obervateur d'evènements ?
Un coup de filemeon montre un accès refusé lors du decompactage ?
Peut tu compiler ton code en tant que cgi (exe ou dll) pour voir ?





A cela je rajoute :

- ces composants ont-ils besoins de DLL externes, et dans ce cas là
sont-elles bien dans windows/system32 ?

- ces composants ne font-ils pas appels par hazard à une pompe à message
(genre Application.ProcessMessages) ce qui dans une DLL peut poser des
problèmes ?

- est-ce que les fonctions de bases fonctionnent dans une DLL ? Genre 1
DLL avec un composant qui se contente d'extraire une archive, sans code
particulier. Cela juste pour vérifier si il s'agit d'un problème avec
les composants dans une DLL ou ton propre code qui fait un truc qui ne
plait pas.

- A priori étant donné que même dans une DLL ca ne fonctionne pas trop,
je pense plus qu'il s'agit d'un problème Delphi que d'un problème IIS,
aussi je te conseilles de poser ta question sur un forum Delphi/Pascal

A++

Yanos