2008-12-02 8 views
2

Ce problème a été résolu grâce à vos suggestions. Voir le bas pour plus de détails. Merci beaucoup pour votre aide!L'application ASP.NET présente un comportement étrange à travers le pare-feu

Notre site ASP.NET est accessible à partir de plusieurs sites internationaux spécifiques et hautement sécurisés. Il a bien fonctionné, mais nous avons ajouté un autre emplacement client qui présente un comportement très étrange.

En particulier, lorsque l'utilisateur entre des critères de recherche et clique sur le bouton de recherche, la liste des résultats retourne vide. Il n'affiche même pas le texte '0 résultats renvoyés', donc c'est comme si le contrôle Repeater ne se liait pas du tout. Un comportement similaire apparaît dans certaines parties du site, mais pas toutes. L'utilisateur peut se connecter au site correctement et ses informations de profil sont affichées.

J'ai ouvert une session sur le site en utilisant exactement les mêmes informations d'identification et le site fonctionne bien à partir d'ici. Nous avons soigneusement suivi les étapes, donc je suis convaincu que ce n'est pas un problème d'utilisateur. Je lie les résultats de la recherche dans le PageLoad de la page de résultats de recherche la première fois qu'il est chargé (le critère est dans la chaîne de requête). à savoir

if (!IsPostBack) { 
    BindResults(); 
} 

je peux reproduire exactement le même comportement localement en commentant la méthode BindResults() appel.

Est-ce que quelqu'un sait comment la valeur de IsPostBack est calculée? Est-il possible que leur configuration de pare-feu hautement sécurisé fasse que IsPostBack retourne toujours vrai, même s'il s'agit d'une redirection depuis une autre page? Cela pourrait être un casse-tête comme le problème pourrait être ailleurs. Cela reproduit exactement le résultat.

Je n'ai pas accès au site, le dépannage se limite donc à leur donner des instructions et à leur demander de me communiquer le résultat.

Merci pour votre temps! Information additionnelle: Le client est derrière un pare-feu Microsoft ISA 2006 exécutant des règles par défaut. Le site a été ajouté à la liste des sites de confiance d'Internet Explorer et testé dans FireFox et Google Chrome, tous avec le même résultat.

SOLUTION: Le gagnant pour moi était la suggestion d'utiliser Fiddler. Quel excellent outil qu'aucun développeur Web ne devrait être sans. En utilisant ceci, j'ai été capable de retirer divers en-têtes de la requête jusqu'à ce que je reproduise le problème. Il y avait en fait deux facteurs qui ont causé ce bug, comme c'est souvent le cas avec de tels problèmes confus. Facteur un - Dans la mesure du possible, l'application Web utilise la compression GZIP telle que prise en charge par tous les principaux navigateurs. Le pare-feu supprimait l'en-tête qui spécifiait le support de décompression GZIP (Accept-Encoding: gzip, deflate). Facteur deux - Un bogue dans mon code signifiait que certains traitements étaient ignorés lorsque le contenu était envoyé non compressé. Ce problème n'a pas été remarqué auparavant car l'application est utilisée par un public limité, tous supportant la décompression GZIP.

Répondre

3

Si ils sont à la pointe de la technologie, je voudrais qu'ils téléchargent Fiddler ou quelque chose de similaire, capturent toute la session HTTP, puis vous envoient la session sauvegardée. Peut-être que quelque chose y restera. En attendant, voyez si vous pouvez obtenir une installation de ISA Server (une installation d'évaluation, si nécessaire, ou une de MSDN si vous avez ou connaissez quelqu'un avec un sous) et voyez si vous pouvez le répliquer localement.

1

Est-il possible que le client ait désactivé Javascript et qu'il ne prenne pas la valeur du formulaire _EVENTTARGET?

+0

Merci pour la suggestion. J'ai essayé d'utiliser le site avec Javascript désactivé et cela fonctionne bien (au moins cette partie du site est). En outre, ils ont ajouté le domaine à leur liste des sites de confiance Internet Explorer et ont essayé Firefox et Chrome, donc Javascript aurait dû être activé. – Andrew

+0

Peut-être mettre en place une page de test qui répercute toutes les variables de formulaire et assurez-vous que le __VIEWSTATE est propagé. Pour chaque clé en tant que chaîne dans Request.Form Response.Write (clé & "=" + Request.Form (clé)) Suivant – Turnkey

1

Il peut s'agir d'une sorte de proxy qui crée une requête GET à partir d'une requête POST donnée ...

Je ne sais pas comment le IsPostBack est calculé, mais je pense serait qu'il vérifie la requête HTTP pour voir si elle est un POST ou GET ...

1

Ohh, oui. Il est certainement pas « _EVENTTARGET » BTW ...

Je sais cela depuis Ra-Ajax ne passe aucun de ces paramètres au serveur et ils (les demandes Ra-ajax) sont traitées comme des demandes IsPostBack ...

1

Pourriez-vous créer une page de publication de test qui transmet les mêmes résultats que votre page de recherche, et dans le Page_Load, réécrire tous les articles pour s'assurer qu'ils sont transmis, en particulier le __VIEWSTATE. Ensuite, demandez à l'un des utilisateurs de retransmettre ce qu'il voit sur cette page de test.

EDIT: Il y a des documents que certains pare-feu peuvent corrompre la VIEWSTATE et quelques méthodes pour contourner: View State Overview

1

Emplacement, emplacement, emplacement. Vérifiez la culture de l'utilisateur. Normalement, cela provoque des problèmes.

1

Vérifiez les journaux IIS pour voir si la requête parvient même à votre serveur. L'installation ISA peut mettre en cache la demande initiale et la diffuser dans les demandes suivantes.