vendredi 22 avril 2016

ASP.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1 - l'enfer du DotNET

Vous comprenez toutes ces versions du .NET Framework ? Moi pas encore. Alors essayons de découvrir ce qu'il se cache derrière tout ça.

https://msdn.microsoft.com/fr-fr/library/w0x726c2(v=vs.110).aspx
.NET Framework 4.6 et 4.5

http://getdotnet.azurewebsites.net/target-dotnet-platforms.html
A lire absolument, les versions du DotNET sont associées et expliquées avec celles de Visual Studio.

Problème et symptômes

Depuis peu j'ai des soucis avec mon Visual Studio 2013 et la mise à jour Service Pack 4. Je désinstalle les mises à jour, le SP4. Je réinstalle mon Visual Studio 2013 à partir du DVD d'installe.

Et boom !
ASP.NET 4.5 n'est pas enregistré sur le serveur Web.
Je tente un coups de :
C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis -i puis avec l'option -ir.

Rien n'y fait ! Entre temps, je pense que les mise à jours de Windows avaient installées le Framework 4.6.1 et que mon Visual Studio 2013 n'est pas compatible avec cette version sans le SP4 !

Bienvenu dans l'enfer du DotNET !

Recherche d'une solution

Je regarde dans les programme installé, j'ai le Framework 4.5.2 :

Les différentes version du framework .NET, c'est lenfer !
Ah bon le 4.5.2 ? Moi je croyais que j'étais resté au 4.5... bref ça ne marche pas !

Sur cette machine, il y a aussi le 4.6.1 d'installé :

Framework 4.6.1
Je ne me dégonfle pas, je vire tout ça !
Par curiosité, je regarde dans le répertoire C:\Windows\Microsoft.NET\Framework\v4.0.30319,

Voici ce que j'y vois :

Framework 4.0.30319
Après ces désinstallations successives, je pensais que j'allais retrouver un FrameWork 4.5 ou 4.5.1 mais quand je vois le tête du répertoire 4.0.30319, une chose est sûr, ça va beaucoup moins bien marché maintenant ;-)

Pendant ce temps, évidemment, mon processus de mise à jour Windows Update est dans les choux complet depuis quelques heures...

Je pars chercher une solution et je reviens ...

Un peu de littérature :
https://blogs.msdn.microsoft.com/dotnet/2015/12/09/support-ending-for-the-net-framework-4-4-5-and-4-5-1/

Ça déprime un peu ! Ça pique même un peu également. Je crois que je vais choisir un des liens d'installation du 4.5.2 qui m'à l'air d'être supporté... par Windows et par Visual Studio à la fois.

https://www.microsoft.com/fr-FR/download/confirmation.aspx?id=42642
Installation de Microsoft.NET Framework 4.5.2

Bienvenu dans l'enfer du DotNET !

Allez une petite dernière pour la fin :

Mise à jour cliquez sur Oui
Voilà, malgré tout, ça fonctionne quand même, c'est du bidouillage le problème c'est que l'on a rien appris sur les différents frameworks et les différentes versions et que comme professionnel, je n'ai pas de temps à perdre avec tout ça !

Have fun!

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 !







mardi 23 février 2016

ASP.NET Configuration Error - Server Error in '/' Application

Vous cherchez à installer un Site Web sur un serveur IIS. A l'exécution de votre nouveau Site Web vous obtenez des erreurs, et ça continue, des erreurs encore et encore. Cette fois, j'ai installé parfaitement mon application sur Windows 7 Pro avec IIS 7.5, elle tourne ! Voici que je tente de faire exactement la même chose sous Windows 2008 R2 avec IIS 7.5 et voici ce superbe résultat :

IIS 7.5 des erreurs encore des erreurs que des erreurs
<httpRuntime maxRequestLength="104857600" />

Cette erreur n'est même pas dans le Web.config de mon application ! Il faut aller voir dans le Web.config du Framework 2.0. Je m'exécute, je vais dans :

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG

Pour modifier le Web.config, je prends garde de faire une copie du fichier et je fourre "2095151" dans le paramètre maxRequestLength.

IIS 7.5 configuration
Notez au passage le nombre de trucs et de machins qu'il faut configurer avec IIS 7.5 ... C'est tout bonnement affolant ! Vertigineux ! Pensez-vous que cela va suffire à faire fonctionner mon site web avec l'IIS de Windows 2008 R2 ? Ce site qui fonctionnait si bien avec l'IIS de Windows 7. Détrompez-vous !

Et BOUM ! Ça pète ailleurs ...

http://pageerreur.aspx/?msg=Failed+to+generate+a+user+instance+of+SQL+Server+due+to+failure+in+retrieving+the+user%27s+local+application+data+path.+Please+make+sure+the+user+has+a+local+user+profile+on+the+computer.+The+connection+will+be+closed.

Pffff, c'est fatiguant !

Chaîne de recherche Google :

SQL Server : Failed+to+generate+a+user+instance+of+SQL+Server+due+to+failure+in+retrieving+the+user%27s+local+application+data+path.+Please+make+sure+the+user+has+a+local+user+profile+on+the+computer.+The+connection+will+be+closed.

Et là, c'est le cauchemar mais je crois que la solution se trouve sur la page suivante de Stack Overflow :

http://stackoverflow.com/questions/4770596/failed-to-generate-a-user-instance-of-sql-server-due-to-failure-in-retrieving-th

Des explications abracadabrantesques !

Resolution for Windows 7 and Windows Server 2008 R2

Tiens, tiens, il y aurait un problème ? Tu m'étonnes !

Et à nouveau : NETWORK SERVICE

Un vrai délire mais je pense bien que la solution est là ...

D'autres explications délirantes, c'est ici :

https://support.microsoft.com/fr-fr/kb/2002980
Là aussi on trouvera certainement la solution une idée de la solution.

Solution pour Windows 2008 R2 - Site Web IIS 7.5 et Visual Studio 2010

Je vais essayer d'expliquer ce qui a fonctionné pour moi. On ne sait jamais trop comment, on ne peut pas non plus expliquer pourquoi, mais je vais vous décrire un peu la solution qui a fonctionnée pour moi :

C'est d'avoir configurer le modèle de processus du pool d'applications avec NetworkService au lieu ApplicationPoolIdentity ...

On prend une grande respiration et on y va. Cela se passe dans l’outil Gestionnaire des Services Internet :

Gestionnaire des Services Internet d'IIS 7.5
Pour faire tourner mon applications, j'ai créé un pool d'application qui tourne avec le framework 2.0. Je dois spécifier dans les "Advanced Settings..." :

IIS 7.5 Advanced Settings du Pool d'applications
que le modèle de processus pour mon Pool d'applications est "NetworkService" et pas "ApplicationPoolentity" !

Choisir pour le Process Model : NetworkService
Et vous trouvez ça normal !? Moi, personnellement, je trouve ça délirant !

Et si vous lisez cet article, s'il vous a aidé, merci de laissez un petit commentaire. Ça me fait toujours plaisir.

Have great fun !

jeudi 4 février 2016

ASP.NET MVC 4 Razor Html.Helpers functions samples

Vous cherchez des exemples d'utilisation des méthodes helpers, vous êtes comme moi. Je pratique ASP.NET MVC depuis des mois, je suis capable de développer de nouvelles fonctionnalités d'installer de déployer un site. Et puis je me rends compte qu'en fait je ne maîtrise même pas totalement une vulgaire liste de boutons radios.

Je suis stupéfait du peu d'exemples que l'on trouve sur Internet, je vais essayer ici, d'y remédier en vous donnant le mien. J'ai mis tu temps à trouver la page suivante dans MSDN :

Rendering a Form in ASP.NET MVC Using HTML Helpers

https://msdn.microsoft.com/en-us/library/dd410596(v=vs.100).aspx
Exemples, un peu intéressant d'utilisation des fonctions Html.Helpers même si ce n'est pas du Razor...

Les autres pages n'ont vraiment aucun intérêt ! Et pourtant, lorsque l'on cherche sur Internet, on retombe toujours dessus ! Par exemple la page :

https://msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.radiobutton(v=vs.100).aspx
ne vous apprendra aucunement à utiliser la fonction @Html.RadioButton. Elle n'a aucun intérêt. C'est assez incroyable !

Même le site de StackOverFlow est relativement muet :

http://stackoverflow.com/questions/14313475/how-to-add-a-htmlattributes-in-this-htmlhelper
Un exemple, pas très intéressant ...

http://stackoverflow.com/questions/23382612/set-a-radiobuttonfor-checked-by-default-within-a-foreach-loop
Là c'est intéressant, la remarque de "martennis" est la bonne : Si l'attribut "checked" est présent, peu importe ce qu'il y  dedans ! Le bouton sera coché ! Et comme c'est une radiolist, ce sera le dernier qui sera coché ! Incroyable à croire que cela n'intéresse personne ... ASP.NET MVC est mort et on ne m'a pas prévenu ???

ToBeContinued ...

Concernant la gestion des RadioButton, il y a plein de problèmes mais voici le début d'une solution :

J'ai donc passé un bon moment à triturer ces exemples, à essayer un tas choses qui n'ont pas fonctionnées, pour finalement trouver le début d'une solution.

RadioButton Html Helper Solution

Controller

        public ActionResult PageItems() 
        {
            var items = new List<SelectListItem>
            {
                new SelectListItem { Value = "1", Text = "Blue", Disabled = false },
                new SelectListItem { Value = "2", Text = "Red" },
                new SelectListItem { Value = "3", Text = "Green", Selected = true },
                new SelectListItem { Value = "4", Text = "Yellow", Selected = true },
                new SelectListItem { Value = "5", Text = "Black" }
            };

            return View( items  );
        }

View

@model List<SelectListItem>

<table style="margin:30px;">
@foreach ( var item in Model )
{
<tr>
<td>
@Html.RadioButtonFor( m => item.Text, "name_value" , item.Selected == true ? (object)new { @checked = "checked" } : new { } ) @item.Text
</td>
</tr>
}    
</table>

Voilà donc comment on utilise correctement la paramètre "Object htmlAttributes" pour sélectionner automatiquement le SelectListItem d'une list de Radiobox au démarrage de la page.

Voici le résultat de l'exécution


Enfin un RadioButton issue d'un @Html.Helper avec le bon item "selected"
L'élément "Yellow" de la RadioButton liste est sélectionné à l'init ! Enfin ! Razor c'est la lutte.
 

vendredi 21 août 2015

C'est quoi le répertoire App_Code ?

Vous vous demandez si vous savez exactement le répertoire App_Code ? Pour un Site Web, ce répertoire, c'est du code qui sera compilé "à la volée" ...

SiteWeb et Application Web
Il n'y a pas de App_Code pour une Application Web ...  ? si peut être ...
Sur cette image, on voit la différence entre un SiteWeb et une ApplicationWeb ... les icônes sont différentes, il y a bien sûr d'autres différences.

Mes Applications Web d'avant, celle en VS 2005 et 2008 ont été traduites par VS 2010 en Site Web maintenant j'en fait des ApplicationWeb c'est plus fun !

https://msdn.microsoft.com/fr-fr/library/Aa983476(v=VS.100).aspx

Je suis fan du BlogEngine.NET, j'avais un moteur de Page, un HttpModule dérivant de IHttpModule dans le SiteWeb le code était dans App_Code et le Web.config était :

  <system.web>
    <httpModules>
      <add name="UrlRewritePage" type="PageEngine.Web.HttpModules.UrlRewritePage"/>
    </httpModules>
  </system.web>

Maintenant, j'en fait une Application Web c'est plus moderne et ça fonctionne avec le Framework 4.0 et plus, mon Web.config sera donc :

  <system.webServer>
    <modules>
      <add name="UrlRewritePage" type="PageEngine.Web.HttpModules.UrlRewritePage"/>
    </modules>
  </system.webServer>

Et voilà comment poursuivre la traduction d'un vieux SiteWeb en ApplicationWeb ...

Have fun !

ASP.NET - C'est toujours la même chienlit !

On a beau trouver toutes les astuces, toutes les petites merdes à rajouter dans le Web.config, dans la page, bla bla bla :

<system.web>
  <httpRuntime requestValidationMode="2.0" />
</system.web>

<location path="test.aspx">
  <system.web>
    <httpRuntime requestValidationMode="2.0" />
  </system.web>
</location>

<@ Page validateRequest="false" %>

https://msdn.microsoft.com/en-us/library/hh882339.aspx

Rien n'y fait, c'est toujours la même chienlit ! Une application qui fonctionnait parfaitement mise à jour dans Visual Studio 2013 se met à merder :

ASP.NET - Sécurité - toujours la même chienlit !!!

Erreur - Conversion d'un projet de site Web en projet d'application Web dans Visual Studio

Vous souhaitez convertir un projet de site web en application web, l'article suivant est pour vous :

https://msdn.microsoft.com/fr-fr/library/Aa983476(v=VS.100).aspx
.
Visual Studio - Projet de site web


Visual Studio - projet d'application Web
Mais vous allez tomber dans une impasse ! Avec Visual Studio 2013 vous ne trouverez jamais la commande "Convertir en application Web".

La solution : lire cet article :

http://asp-net-c-sharp.blogspot.fr/2015/08/mais-ou-est-passe-la-commande-convert.html


jeudi 20 août 2015

Mais où est passé la commande "Convert to Web Application" ?

Vous avez une application développée avec Visual Studio 2005, à l'époque il n'y a pas encore de fichier designer.cs. En 2010 vous l'avez upgradée sans trop faire attention, VS 2010 n'a pas généré les fichiers designer.cs, donc en fait elle ne fonctionne pas. Il vous faut un fichier designer.cs pour en faire une application web alors que ce n'est qu'un pauvre "site web".

Vous ne retrouverez pas facilement la commande dans Visual Studio 2013 qui vous permet de générer le fichier designer.cs car cette commande a été déplacée.

En 2010, on vous disait : cliquez bouton droit sur le répertoire des fichiers et exécutez la commande : Convertir en application web mais en 2013, vous pouvez chercher, cette commande à disparue :

Visual Studio 2013 - Où est passée la commande "Convertir en application web" ?

Solution pour générer les fichier designer.cs

En fait, dans Visual Studio 2013, cette commande est tout bonnement passée dans le menu PROJET :

Visual Studio 2013 - Convertir en application Web
Incroyable non ? Vous en pensez quoi ? N'hésitez pas à me laisser votre commentaire.

Have fun !