IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[HttpModule] État de la requête en sortie


Sujet :

ASP.NET

  1. #1
    Invité
    Invité(e)
    Par défaut [HttpModule] État de la requête en sortie
    Bonjour,

    J'ai un composant d'upload de fichier, sous la forme d'un HTTPModule ASP.Net (je précise que je ne l'ai pas développé moi-même, c'est mon prédécesseur qui l'a fait et je ne l'ai plus sous la main ). Bref.
    Sur le principe, ce module lit la requête HTTP, si c'est une requête de type multipart/form-data, il l'intercepte, extrait les fichiers du flux, les enregistre, et transmet de manière transparente les autres données de la requête. Sur le principe, tout marche bien.

    Seulement voilà, au sortir du module, quand la page ASPX appelée reprend la main, la requête se trouve dans un état bizarre puisque certaines données ont été traitées et d'autres non. Par exemple, la propriété Request.InputStream n'est pas complète et entraîne un fort ralentissement si on tente d'y accéder (environ 30 secondes de battement, ce qui est très long).
    Pour lire la requête dans le module, je commence par faire un worker.GetPreloadedEntityBody(); (où worker est le HttpWorkerRequest de la requête), puis s'il reste des données à lire (!worker.IsEntireEntityBodyIsPreloaded()), je boucle sur un worker.ReadEntityBody(bufferData, readLength). Pour mon traitement à moi aucun soucis.
    Après quelques tests, il me semble que tout ce qui reste dans Request.InputStream après le passage dans mon module c'est ce qui a été "Preloaded", du coup, l'InputStream est incomplète et ASP.Net n'a pas l'air de s'en sortir...

    Hum, je me rends compte que c'est absolument pas évident comme problème à expliquer par écrit ! Puis je sais pas trop quelles infos donner sans expliquer tout en détail et prendre 10 pages...
    Donc, si jamais quelqu'un s'y connait un peu dans ce domaine et veut bien essayer de comprendre ce que je raconte, ce serait super sympa de sa part
    J'ai vraiment du mal à trouver des informations sur des trucs aussi techniques et pointus...

  2. #2
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Je ne suis pas un expert non plus, mais un petite precision : tu n'as plus le code de ton http module? Car d'apres tes explications le probleme vient de la...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ben le truc, c'est que le module est assez gros (il gère pas mal de trucs), et en plus, c'est pour le boulot, je peux pas diffuser le code comme ça...
    J'ai je vais essayer de faire un un module plus simple qui va juste lire le flux sans le traiter, histoire de voir si j'arrive à reproduire le problème dans des conditions moins complexes ! Ça donnera un point de départ !
    Merci pour ta réponse en tout cas, j'espère que t'auras une idée avec le code sous les yeux :p

  4. #4
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Ce que je voulais dire par la, c'est que le probleme vient clairement du module que tu utilises, et on en pourra t'aider que si tu arrives a analyser de quelle portion de ce code ton probleme vient.

    Il faut que tu commence une investigation plus poussée. On ne pourra te répondre que sur des problemes plus précis, plus proche du framework.Pour l'instant, l'énoncé de ton probleme est d'ordre logiciel, à un niveau trop elevé.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Non, je parle bien de ce que fait le module à l'intérieur, de la façon dont il lit les données et la manière dont il les traite. J'ai le code du module donc, et mon but est de le modifier pour que ce traitement des fichiers uploadés soit transparent et fournisse en sortie une requête cohérente.

    J'ai fait un exemple de module plus basique qui lit les données mais n'en fait rien, je rencontre le même problème de latence. En pièce jointes les trois fichiers nécessaires au test avec mon module simplifié.

    Sur le principe, le module effectue les opérations suivantes à l'événement BeginRequest (ajout de l'appel de ma fonction au niveau du Init) :
    • Si on a pas une requête de type POST multipart/form-data, on rend la main.
    • On lit les données préchargées grâce à la méthode GetPreloadedEntityBody() de HttpWorkerRequest
    • S'il reste des données à lire, on boucle sur ReadEntityBody() de HttpWorkerRequest de manière à lire les données au fil de l'eau

    (dans mon exemple, pour me rendre compte de ce qui est lu, j'écris les données lues "en vrac" dans la réponse HTTP)

    Une fois sortie du module, Request.InputStream ne contient que les bytes préchargés, comme si ASP.Net, interrompu dans son traitement (alors qu'il nous autorise tout à fait à l'interrompre) se foutait complètement de ce qui se passait ensuite (oui, je fais un peu de sarcasme, mais ça fait la journée que je suis là-dessus... :p)
    Le problème : quand on tente de lire Request.InputStream, ASP.Net met 30sec. pour rendre la main (le temps de se rendre compte que les données sont incomplètes ?)

    Bref, si quelqu'un a une idée, je suis preneuse Je vais voir ce que j'arrive à faire avec Request.InputStream...
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352

  7. #7
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Par contre as tu vraiement besoin de toper la requete aussi haut? tu ne peux pas attendre d'avoir acces aux objets request et response?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Hum... Le truc de ce module, c'est justement de choper le flux avant qu'il ne soit traité par ASP.Net, au fur et à mesure qu'il arrive. Si j'attends que les objets ASP.Net soient dispo, il aura déjà lu tout le flux et traité les fichiers, ce qui ne m'arrange pas !

  9. #9
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    C'est bien ce que je pensais. Et bien ecoute mes competences s'arrete lá. Je suis désolé de ne pas pouvoir t'aider davantage.

    J'ai essayé ton code et deux trois trucs mais je me heurte au meme probleme que toi , lorsque cette ligne est appellée, le traitement qui suit prend un temps monstrueux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    receivedcount = worker.ReadEntityBody(preloadedBufferData, preloadedBufferData.Length);
    bon courage a toi, et si tu trouves qqchose,n'hésites pas a poster !

  10. #10
    Invité
    Invité(e)
    Par défaut
    Merci pour ton temps en tout cas
    Mais oui, si je trouve quelque chose, je posterai sans doute un résumer ici ^^

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2022, 11h32
  2. Afficher 1 état selon différentes requêtes
    Par bloichot dans le forum IHM
    Réponses: 7
    Dernier message: 03/03/2008, 09h56
  3. Réponses: 6
    Dernier message: 30/12/2007, 00h08
  4. Réponses: 2
    Dernier message: 09/11/2007, 20h13
  5. Réponses: 3
    Dernier message: 14/02/2006, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo