Je développe un service Web asmx (à savoir ASP.NET 2.0).Première demande échoue avec HTTP 400 (demande incorrecte) après avoir lu HttpRequest.InputStream
Un morceau de code peut lire le contenu de la requête HTTP (via HttpContext.Current.Request.InputStream
) lors du traitement. Je me rends compte que InputStream peut seulement être lu une fois pour une demande, et je m'assure que je n'essaie jamais de le lire plus d'une fois. Le problème semble être que si InputStream arrive à être lu pendant les premières étapes du cycle de vie de l'application (par exemple après pskill w3wp
, pendant Application_Start), la requête HTTP échoue avec une erreur HTTP 400 - Bad Request, sans explication donnée , aucune exception levée et aucune entrée dans le journal httperr. S'il est lu plus tard (par exemple dans la méthode Web elle-même), les requêtes s'exécutent correctement si InputStream est lu ou non. Application_Start fonctionne correctement si InputStream n'est pas lu.
Est-ce une sorte de bogue ASP.NET? Bug IIS? Ou est-ce que je fais quelque chose de mal en osant lire InputStream? Et si oui, y a-t-il un autre moyen de voir le contenu "brut" de la requête sans déranger le fonctionnement interne de IIS/ASP.NET?
En bref, l'ajout de ce code dans Application_Start suffit de reproduire cette erreur:
using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream))
reader.ReadToEnd();
Je pense que vous devez poster un code qui reproduit cette question. N'envoyez pas tout votre code, juste assez pour que les gens courent et reprennent. – Kev
Votre suggestion m'a forcé à enquêter un peu plus en profondeur. Question révisée en conséquence. Merci! –
Je ne crois pas qu'il soit possible d'appeler reader.RadToEnd dans Application_Start car la requête n'a peut-être pas été entièrement reçue. –