mardi 15 mars 2016

Boucle de redirection - ERR_TOO_MANY_REDIRECTS - l'enfer du DotNET

Une fois déployée sur votre Serveur de production, votre application ASP.NET ne fonctionne pas mais alors pas du tout ! Vous avez un message "boucle de redirection" ERR_TOO_MANY_REDIRECTS dont vous n'arrivez pas à vous débarrasser. J'ai la solution !

Erreur boucle de redirection
Votre application ne répond pas correctement à la requête http et le site part en boucle !

Quel est le problème avec cette "Boucle de redirection" ?

Et c'est bien là  l'enfer du DotNET car vous avez testé en debug avec Visual Studio, vous avez déployé en local et ça fonctionne parfaitement. Mais une fois le site déployé sur le serveur de production c'est la catastrophe. Et le message d'erreur semble comme d'habitude, totalement bidon sans aucun rapport avec l'erreur réelle.

Je n'ai pas les moyens d'investigation sur le serveur, le débogueur à distance ne fonctionne pas et je ne souhaite pas l'installer cela encombrerait mon serveur.

Quelles sont les différences au niveau d'IIS ?

Sur ma machine de développement, je regarde :

Version d'IIS sur ma machine de développement
Sur le serveur, je fais la même chose :

Version d'IIS sur le serveur de développement
Il s'agit dans les deux cas d'un IIS 7.5.7600.16385 ... On dirait bien la même chose !

Donc au niveau d'IIS pas de différence !

Si quand même, a noter :
La langue est différente : Serveur de dev en Fr, Serveur de prod en Gb ... Et là solution est là !

Ce qui met la puce à l’oreille

Dans ce cas, on sait par expérience que toute la littérature du monde ne pourra pas vous être utile. Par là, on vous dit de supprimer les cookies de votre application, par ailleurs on vous indique une autre solution, toutes sont aussi farfelues. Je vais chercher pendant un certain temps. Et puis, je vais me raccrocher au message d'erreur de ma page d'erreur, c'est moi qui l'aie mise en place :
PageErreur.Aspx?msg=String+was+not+recognized+as+a+valid+DateTime.

Qu'est ce qui peut bien faire qu'une DateTime ne soit pas valide ?

Solution DateTime non valide dans le Web.config

La Culture, mais oui, c'est la culture qui rend ma DateTime non valide, je lis alors cette page :


Dans le Web.config, on peut configurer la culture du site web :

<configuration>
   <system.web>
     <globalization culture="en-GB"/>
   </system.web>
</configuration>

Me voilà avec la puce à l'oreille, je trouve une ligne un peu plus moderne à ajouter dans mon Web.config :

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="auto" uiCulture="auto" />

Et le tour est joué ! Mon site fonctionne !

Conclusion, c'est l'enfer du .NET

Il faut bien le reconnaître ASP.NET, c'est purement l'enfer et ça depuis des années. On est passé du premier serveur IIS qui fonctionnait à peut prêt : IIS 5.0. Mais parfois les messages d'un site en rade était ... Cosmiques et surtout ne correspondaient en rien avec la solution à mettre en oeuvre. Aujourd'hui avec 7.5 et 8.0 la partie configuration est un peu plus claire, surtout depuis la réorganisation entre Pool d'Application, Site Web et Répertoire Virtuel, cela apporte de la clarté mais il traîne encore trop de vacheries qui devraient disparaître à mon sens.

Le fichier Web.config, suivant les versions, est farcie de ligne stupides sans intérêt.










mercredi 9 mars 2016

Erreur HTTP 500.23 - Internal Server Error

Encore un problème avec le serveur IIS, une application qui fonctionnait parfaitement est tombée en panne. Il faut dire que le Web.config est modifié pour un oui ou pour un non par tout un tas d'acteurs et surtout lorsque l'on change de Visual Studio ou d'IIS. Voilà le résultat :

IIS Impossible de développer de façon professionnelle
Comment expliquer à vos clients que le temps de développement de leur application dépend essentiellement de toutes les saloperies que les ingés de Redmond ont bien voulu mettre dans leur serveur IIS de daube !

Problème Erreur HTTP 500.23 - Internal Server Error

C'est vraiment génial de lire toute cette littérature ...; )

Causes les plus probables :

Cette application définit la configuration dans la section system.web/httpHandlers.

Essayer les choses suivantes :

On me dit d'essayer les choses suivantes :

Faites migrer la configuration vers la section system.webServer/handlers. Vous pouvez procéder manuellement ou en utilisant AppCmd depuis la ligne de commande. Par exemple, à partir du répertoire d'installation d'IIS Express, exécutez appcmd migrate config "Default Web Site/". L'emploi d'AppCmd pour faire migrer votre application lui permet de fonctionner en mode intégré, de continuer à fonctionner en mode classique et sur les précédentes versions d'IIS.
Si vous êtes certain que cette erreur peut être ignorée sans risque, procédez à la désactivation en définissant system.webServer/validation@validateIntegratedModeConfiguration avec la valeur False.
Une autre solution consiste à basculer l'application vers un pool d'applications en mode classique. Par exemple, à partir du répertoire d'installation d'IIS Express, exécutez appcmd set app "Default Web Site/" /applicationPool:"Clr4ClassicAppPool". Ne procédez ainsi que si vous ne pouvez pas faire migrer votre application.

Bla bla bla bla ...

Erreur HTTP 500.23 - Internal Server Error - Solution

J'avais une ligne dans mon Web.config que j'ai mise en commentaire :

    <!--<httpHandlers>
      <add verb="*" path="monster.axd" type="HttpHandlers.MonsterHandler" validate="false"/>
    </httpHandlers>-->

Voilà... c'est tout !

Je suppose que quelque chose est tombé en panne par ailleurs, en tous cas mon application fonctionne à nouveau !

Have fun ! Et surtout n'oubliez pas c'est que du Soft !

mardi 8 mars 2016

Impossible de lancer le serveur Web IIS Express

Google ne donne aucun résultat ! Et pourtant c'est bien le message que retourne l'application que j'essaye de déboguer :

Impossible de lancer le serveur Web IIS Express
Curieux rien de nouveau sous le soleil, toujours autant de problèmes ! Quelle perte de temps ...

Je ne peux pas être LE SEUL à avoir ce genre de problème !

Hommage au BlogEngine.NET sur le Codeplex et GitHub

L'étude de ce projet m'a beaucoup apportée aussi j'aimerais rendre un vibrant hommage à ce projet du CodePlex le BlogEngine.NET, en effet c’est un projet démarré en 2007 par un certain Mads Krisensen et son équipe et qui depuis n’a cessé d’évoluer avec les différents frameworks .NET et les différentes versions de Visual Studio ce qui en soit est une véritable performance.

Le BlogEngine.NET, c’est donc un fantastique projet qui n’a cessé de capitaliser sur les évolutions du développement d’application ASP.NET. Son code source C# est une véritable mine d’exemples, d’architecture (XmlProvider entre autre) et autres astuces tera fun. Un projet que l'on peut véritablement prendre en exemple.

Voici la page d'accueil de votre nouveau blog, une fois installé :

BlogEngine.NET
Voici les sources de ce projet de Blog en ASP.NET C# au sein du CodePlex :

https://blogengine.codeplex.com/
Mais comme vous le savez le CodePlex se meurt, voici donc les sources migrées sous GitHub :
 
 
N'hésitez pas à investir sur la compréhension de ce projet qui est une véritable référence dans le monde DotNET.
 
Merci de votre attention,
 


mercredi 2 mars 2016

input type=submit text multiligne

Vous cherchez à créer un bouton dont la propriété "Text" en ASP.NET ou "value" en html serait sur plusieurs lignes. Voici donc les mots clefs que j'ai entrés ce matin dans mon moteur de recherche favori pour tenter de répondre à cette question.

Je suis halluciné par la complexité du développement html, rendue encore plus complexe par les mésententes organisées des différents protagonistes du web, w3c, google, microsoft, apple et consorts. J'avais une truc qui fonctionnait très bien sous Internet Explorer.

Dans le cadre d'une interface un peu complexe je souhaitais faire un bouton cliquable dont le texte serait sur deux lignes comme suit :
Interface complexe avec boutons sur deux lignes dans Internet Explorer
Reconnaissez avec moi que l'interface est complexe et que l'information "Enchainez les questions" est plus parlante que simplement "Enchainez" ...

On voit donc ici dans IE un bouton sur deux ligne; Si j'affiche la source j'obtiens le code suivant :

<table border="0" cellpadding="5px">
<tr>
    <td valign="top" align="center">
        <input type="submit" name="ctl00$LoginView2$MenuContexte$ButtonWizardQuestionEnchainee" value="Enchainez
les Questions" id="ctl00_LoginView2_MenuContexte_ButtonWizardQuestionEnchainee" title="Ajouter plusieures Questions" class="ButtonMenuWizardStyle" />
    </td>
</tr>
</table>

Essayons maintenant la même chose dans Chrome. Je ne sais pas si vous êtes comme moi mais IE jusqu'à IE 8 était devenu un gros bouzin bien lent et bien encombrant. Je trouve que Chrome rattrape IE aujourd'hui Chrome est un gros bouzin bien gras et bien encombrant surtout depuis qu'il veut absoluement vous connecter avec un compte pour voler toutes vos infos personnelles age sexe téléphone et pourquoi pas carte bancaire ...

Bref voici le résultat :

Chrome ne sait pas afficher un bouton dont le texte est sur deux lignes !
C'est tout pourri et pourtant l'html est exactement le même avec l'attribut value du intput type="submit" à :

"Enchainez
les Questions"

Et pourtant cette saloperie de Chrome n'affiche le bouton que sur une ligne ! Oui oui je dis bien saloperie de Chrome parce que je les soupçonne de l'avoir fait exprès !

Pensez vous qu'il est possible d'afficher un  bouton dont le texte est sur deux lignes dans chrome ? Pour moi après avoir parcourue les pages suivantes :

Ici vous pouvez écrire votre html pour tester le résultat

Ici on vous explique qu'il faut utiliser un textarea et ce n'est pas la bonne réponse

Là on vous explique qu'en ajoutant : "&#13;&#10;" dans la chaine value vous obtiendrez le résultat escompté mais c'est faux ! Cela ne fonctionne pas ! Aucune de ces solutions ne fonctionnent avec Chrome !

Chienlit !