Blog de Bertrand Vergnault

Consultant .NET / SharePoint, Toulouse

Actuellement consultant .NET / SharePoint au sein de la société Exakis à Toulouse.
Microsoft Certified Professional Developer

Vous pouvez consulter mon CV ici

Vous pouvez consulter mon transcript ici.

RecentComments

Comment RSS

[ASP.NET MVC] Tutorial "NerdDinner" disponible

Sur son blog ScottGu's publie aujourd'hui un article concernant la mise à disposition d'un tutorial ASP.NET MVC au format HTML. Beaucoup plus lisible qu'un simple PDF ;)

Retrouvez donc ce tutorial à cette adresse : http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx

Posted: Apr 28 2009, 20:40 by bertrandv | Comments (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | Général

[ASP.NET MVC] Sortie de la version finale 1.0 !

La sortie de la version finale du Framework ASP.NET MVC est sortie aujourd’hui.

Au niveau des changements apportés par rapport à la version RC2 :

- correction de quelques bugs
- mise à jour de la version de JQuery intégrée au Framework MVC : passage à la version 1.3.2

La version finale 1.0 est disponible en téléchargement ici.

Posted: Mar 18 2009, 16:00 by bertrandv | Comments (4) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET

[ASP.NET MVC] Partie 2 : Traitement d’une URL par une application MVC

Dans un précédent billet, j’ai pu expliquer le design pattern MVC. Parmi ses avantages, j’ai indiqué que l’URL mapping était optimisé pour le référencement et très “user-friendly”.
Pour y revenir plus en détails, dans une application ASP.NET MVC, l’URL mapping par défaut se présente sous cette forme : {controller} / {action} / {id}.

Par exemple, nous pourrions avoir l’URL suivante : http://www.dotnet-france.com/Cours/Details/10. “Cours” correspondrait au nom du controller, “Details” correspondrait à l’action qui serait déclenchée dans le controller et “10” correspondrait à l’id du cours pour lequel afficher les détails.

De ce fait, on peut donc étudier quel va être le cheminement que va faire l’application pour afficher la page correspondant à l’URL demandée :

URL

 

Lorsqu’une requête est envoyée, le serveur la traite en suivant le “chemin” indiqué ci-dessus.

Tout d’abord, l’URL est analysée dans le fichier Global.asax grâce aux règles de routage qui y sont précisées. Si l’URL correspond à une des règles, alors elle est envoyée au controller correspondant. Par contre, si elle ne correspond pas, elle pourra être renvoyée vers une action par défaut.

Une fois dans le controller, l’action correspondante à celle indiquée dans l’URL (après le nom du controller) sera exécutée. L’action est en fait une méthode qui est exécutée. Cette action permettra de récupérer des données dans le model ou de les mettre à jour, etc…Ensuite, l’action renverra vers la vue indiquée dedans.

Cette vue correspond donc à la page ASPX à afficher.

Voilà pour le principe de base de l’exécution d’une URL dans une application MVC.

Dans un prochain billet je montrerai le template de base de Visual Studio.

Posted: Mar 13 2009, 21:17 by bertrandv | Comments (1) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET

[ASP.NET]Forcer le mode de compatibilité de votre site sous IE 8

Comme vous avez pu le remarquer si vous utilisez IE 8, l’interprétation de certains site web est modifié et il peut apparaître quelques différences au niveau présentation assez gênantes !

En tant que développeur web, si c’est le cas sur votre site web, il existe un moyen facile de remédier à cela : forcer IE 8 à utiliser son mode de compatibilité pour retrouver un affichage IE 7.

Pour cela, ajoutez sur les pages la balise suivante :


<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

Posted: Mar 05 2009, 18:47 by bertrandv | Comments (2) RSS comment feed |
  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET

[ASP.NET MVC] Partie 1 : Présentation de MVC

Il y a environ 1 mois est sorti la version Release Candidate d’ASP.NET MVC, je vais donc réaliser une saga MVC afin de faire partager au plus nombre cette alternative au développement Web forms !

Dans ce premier billet, je vais faire une présentation générale de l’architecture d’une application MVC.

Tout d’abord il vous est possible de télécharger ASP.NET MVC ici.

ASP.NET MVC est l’implémentation du design pattern MVC (déjà très connu) pour la conception d’applications web. Ce design pattern permet le découpage de notre application en 3 couches disctinctes : Model, View and Controller.

MODEL : Cette couche va contenir l’accès aux données via Linq-To-SQL/Entities ou via votre propre provider de données. Cette couche permettra aussi la mise à jour des données affichées dans la vue.

View : Cette couche correspond à l’interface de votre application. Elle permettra d’afficher les données du model et de récupérer les entrées utilisateurs.

Controller : C’est la couche qui pilotera toute votre application. Elle permettra de gérer les actions à réaliser sur les formulaires suivant les actions utilisateurs. De plus, elle gèrera les modifications à apporter à la couche Model donc aux données.

 mvc

  Les avantages de réaliser une telle architecture sont :

  • Facilité de mise en place des tests unitaires : en effet, des tests unitaires peuvent êtres mis en place pour chaque couche séparée les unes des autres.
  • Un mapping d’URL permettant d’avoir nativement des URL optimisées pour le référencement et pour l’URL rewriting.
  • Routage de chaque action utilisateur vers le contrôleur correspondant. Il n’y pas plus de notion de postback comme pour les webforms mais on parle d’action.

Dans un prochain billet je montrerai plus en détails ASP.NET MVC en présentant le template fournit dans l’add-on Visual studio 2008. J’expliquerai les fonctionnement basique de ce type de développement d’applications web.

Posted: Feb 23 2009, 01:21 by bertrandv | Comments (4) RSS comment feed |
  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | C#

[ASP.NET]Prise en compte de Silverlight et Flash dans un AdRotator

Souhaitant ajouter des publicités en Silverlight dans le site de Dotnet-France, j’ai été confronté à un léger soucis : le contrôle ASP.NET AdRotator ne prend en charge que les .gif et formats d’image classiques !

J’ai donc décidé d’améliorer le contrôle existant en créant mon propre contrôle héritant du contrôle AdRotator.

Pour plus d’informations concernant le contrôle AdRotator de base dans ASP.NET : lien vers la msdn.

Tout d’abord, créer un projet de bibliothèque de classes. Dedans, ajouter (en récupérant le template dans ceux déjà présents dans Visual) un ASP.NET Server Control :

Image2

Dans le contrôle que l’on vient de créer, on peut voir que la classe hérite de WebControl. Hors, afin de récupérer les fonctionnalités du contrôle ASP.NET AdRotator, il faut faire hériter notre classe de AdRotator.

De ce fait, on peut supprimer tout le contenu de la classe et rajouter seulement les fonctionnalités dont on aura besoin pour prendre en compte Silverlight et Flash.

Voici donc au départ à quoi ressemble la classe :

Image3

Tout d’abord nous allons avoir besoin de 4 variables dans notre classe :

  • Un booléen permettant de spécifier si la pub choisie dans le fichier XML est une pub Silverlight
  • Un booléen permettant de spécifier si la pub choisie dans le fichier XML est une pub Flash
  • Une chaîne de caractères permettant de stocker le chemin vers le fichier Silverlight ou Flash à afficher
  • Une chaîne de caractères permettant de stocker le lien lorsqu’on clique sur la pub

Image4

Il faut ensuite étendre la méthode appelée lors de l’évènement AdCreated : OnAdCreated. C’est dans cette méthode que nous allons pouvoir déterminer si la pub choisie est en Silverlight ou en Flash (grâce à l’extension du fichier dans le fichier XML utilisé par le contrôle AdRotator) :

protected override void OnAdCreated(AdCreatedEventArgs e)

{
   base.OnAdCreated(e);
   if (e.ImageUrl.ToLower().IndexOf(".xap") != -1)
   {
      this.IsSilverlight = true;
      this.IsFlash = false;
      this.ImgUrl = e.ImageUrl;
      this.NavUrl = e.NavigateUrl;
   }
   else if (e.ImageUrl.ToLower().IndexOf(".swf") != -1)
   {
      this.IsFlash = true;
      this.IsSilverlight = false;
      this.ImgUrl = e.ImageUrl;
      this.NavUrl = e.NavigateUrl;
   }
   else
   {
      this.IsSilverlight = false;
      this.IsFlash = false;
   }
}

 

Il faut ensuite étendre la méthode Render pour afficher la pub Silverlight ou Flash correctement :

protected override void Render(HtmlTextWriter writer)
{
   if (IsSilverlight)
   {
      StringBuilder sbSlv = new StringBuilder();
      sbSlv.Append("<object data='data:application/x-silverlight,' ");
      sbSlv.Append("type='application/x-silverlight-2' ");
      sbSlv.Append("width='{0}' height='{1}'>");
      sbSlv.Append("<param name='source' value='{2}' />");
      sbSlv.Append("<param name='onerror' value='onSilverlightError' />");
      sbSlv.Append("<param name='background' value='white' />");
      sbSlv.Append("<param name='minRuntimeVersion' value='2.0.31005.0' />");
      sbSlv.Append("<param name='autoUpgrade' value='true' />");
      sbSlv.Append("<a href='http://go.microsoft.com/fwlink/?LinkID=124807' style='text-decoration: none;'>");
      sbSlv.Append("<img src='http://go.microsoft.com/fwlink/?LinkId=108181' alt='Get Microsoft Silverlight' style='border-style: none' /></a>");
      sbSlv.Append("</object><iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>");
      StringBuilder outputStringSlv = new StringBuilder();
      outputStringSlv.AppendFormat(sbSlv.ToString(), 400, 50, this.ImgUrl);
      writer.Write(outputStringSlv.ToString());
   }
   else if (IsFlash)
   {
      StringBuilder sbFlash = new StringBuilder();
      sbFlash.Append("<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' ");
      sbFlash.Append("codebase='http://download.macromedia.com/pub/shockwave/cabs
/flash/swflash.cab#version=6,0,29,0' width={0} height={1}>"
);
      sbFlash.Append(" <param name='movie' value={2}>");
      sbFlash.Append(" <param name='quality' value='high'>");
      sbFlash.Append(" <embed src={3} quality='high' ");
      sbFlash.Append(" pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash'></embed></object>");
      StringBuilder outputStringFlash = new StringBuilder();
      outputStringFlash.AppendFormat(sbFlash.ToString(), 400, 50, this.ImgUrl, this.ImgUrl);
      writer.Write(outputStringFlash.ToString());
   }
   else
      base.Render(writer);
}

Lorsqu’une pub Silverlight ou Flash doit être affichée on envoie donc le flux HTML correspondant.

Voilà notre contrôle terminé. Il nous est maintenant possible de l’ajouter à la Toolbox de Visual. Pour cela, faire un clic droit sur la toolbox puis cliquer sur “Choisir les éléments”. Dans l’onglet “Composants .NET Framework” cliquer sur “Parcourir” afin de rechercher la dll correspondant dans lequel le contrôle se trouve. Enfin, validez.

Désormais, il est possible d’utiliser le contrôle comme les autres contrôles déjà présents dans la toolbox.

Dans le fichier XML où sont spécifiés les pub à afficher, il vous est maintenant possible de préciser des fichier .xap et .swf. Ils s’afficheront dans l’espace de pub :)

Vous pouvez télécharger les sources du projet : ici

Posted: Jan 13 2009, 17:12 by bertrandv | Comments (1) RSS comment feed |
  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | Général | Silverlight

[ASP.NET]Url Rewriting et Erreur 404 lors d’un postback

untitled
Travaillant à mettre en place un module d’URL Rewriting pour le site web de Dotnet-France, j’ai été confronté à un petit soucis. 

Tout d’abord, tout s’est bien passé, j’ai mis en place les règles de routage que je souhaitai. Le soucis est venu lorsqu'un updatePanel était présent sur la page. En effet, dès que je cliquai sur un bouton, une erreur sur la page se produisait indiquant :

Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the quest on the server. The status code returned from the server was: 404.

Le routage des URL et l'updatePanel semblent poser problèmes entre eux !

Le problème vient du fait que  l’action sur le form ne supporte pas l’url réécrite. De ce fait, afin de pallier à ce problème voici la ligne à ajouter dans le Page_Load de votre page :

protected void Page_Load(object sender, EventArgs e)
{
      form1.Action = Request.RawUrl;
}

Ceci permet donc de récupérer l’URL brute pour la demande en cours pour l’action form.

Posted: Dec 31 2008, 16:46 by bertrandv | Comments (3) RSS comment feed |
  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

[.NET] Exposer un flux RSS à l’aide d’un HttpHandler

Dans un précédent post, j’avais montré comment créer un flux RSS à l’aide du Framework 3.5.
A présent, nous allons voir comment exposer un flux RSS à l’aide d’un HttpHandler.

Lors d’une requête HTTP en ASP.NET une page ASPX est demandée au serveur. Dans le cas d’un HttpHandler, ce n’est plus une page qui est demandée mais une classe.

Dans un premier temps, il faut préciser à notre application ASP.NET quelle classe devra être appelée lorsque notre requête HTTP sera traitée. Pour cela, nous devons ajouter dans le fichier de configuration de notre application les éléments suivants :

<httpHandlers>

   <add verb="*" path="rssfeed.axd" validate="true" type="Syndication.RssFeedHandler"/>
</httpHandlers>

L’attribut “path” indique l’url relative de la requête qui renverra vers le traitement de notre classe.
L’attribut “type” indique le nom de notre classe qui sera traitée.

Passons maintenant à la création de notre classe qui sera appelée lors du traitement de la requête. Cette classe doit implémenter l’interface IHttpHandler contenant les méthode IsReusable et ProcessRequest.

C’est dans la méthode ProcessRequest que se fera tout le traitement. En effet, elle prend en paramètre le contexte HTTP à de la requête.

Pour exposer notre flux RSS, il va donc faloir écrire le flux XML dans la réponse renvoyée au navigateur du client. Pour cela, nous allons créer un XmlWriter qui écrira dans le flux de sortie de la réponse envoyée au client :

XmlWriter wr = XmlWriter.Create(context.Response.OutputStream);

Il suffit ensuite de créer notre flux RSS (voir ce post) et de l’écrire dans notre XmlWriter.

 /*

Voir post précédent pour la création du flux

 

 */Atom10FeedFormatter formatter = new Atom10FeedFormatter(feed);
formatter.WriteTo(wr);
wr.Flush();
wr.Close();

Désormais, lorsque l’on navigue vers l’URL : http://monsite.fr/rssfeed.axd, notre flux rss s’affiche correctement.

Image1

Il est possible ensuite d’apporter des améliorations à notre flux RSS. Par exemple, la possibilité à l’utilisateur de choisir le format (RSS 2.0 ou Atom 1.0) de son flux.

Pour cela, nous allons prendre en compte la valeur d’un paramètre passé dans l’URL afin de choisir le formattage du flux :

http://monsite.fr/rssfeed.axd?format=rss ou http://monsite.fr/rssfeed.axd?format=atom

Une petite modification est à faire dans le code de notre classe appelée pour traiter la requête :

if (context.Request.QueryString["format"].Equals("rss"))
{  
  
Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
  
  
rssFormatter.WriteTo(wr);
}
else if (context.Request.QueryString["format"].Equals("atom"))
{  
  
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
  
  
atomFormatter.WriteTo(wr);
}  

Posted: Nov 23 2008, 15:14 by bertrandv | Comments (1) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | C#

[.NET] Créer un flux RSS à l’aide du Framework 3.5

Dans un précédent post, j’ai montré comment à l’aide du Framework 3.5 il était possible de consommer un flux RSS. A présent, nous allons voir comment créer un flux RSS à l'aide de ces outils du Framework.

Tout d’abord il faut ajouter la référence System.ServiceModel.Web à notre projet.

Un flux RSS est représenté par la classe SyndicationFeed. Grâce à cette classe, nous allons pouvoir spécifier le titre, la description, les items, etc… qui composent notre flux.

SyndicationFeed feed = new SyndicationFeed();

Nous allons créer nos items qui seront contenus dans le flux. Pour cela, nous allons créer une liste de SyndicationItem qui seront la représentation de nos items dans le flux RSS. On pourra spécifier pour chaque item : le nom, la description, le lien, etc…

feed.Description = new TextSyndicationContent("Ceci est mon flux RSS de test");
feed.Title = new TextSyndicationContent("Flux RSS de test");
List<SyndicationItem> lstItems = new List<SyndicationItem>();
lstItems.Add(new SyndicationItem("Premier item", "Ceci est mon premier item", new System.Uri(http://www.dotnet-france.com/item1)));
lstItems.Add(new SyndicationItem("Second item", "Ceci est mon second item", new System.Uri(http://www.dotnet-france.com/item2)));

Une fois les items tous créés, il faut les ajouter au flux :

feed.Items = lstItems;

Ensuite, il faut pouvoir formatter le flux de telle sorte qu’il soit interprétable par le navigateur.
On peut, par l’intermédiaire d’un “formatter” transposer notre flux en Atom 1.0 ou RSS 2.0.

Pour cela,  on créé un objet de type Atom10FeedFormatter ou Rss20FeedFormatter.

Dans cet objet nous allons charger le flux à interpréter :

Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
ou
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);

Voilà, il ne reste plus qu’à exposer le flux RSS précédemment créé afin qu’il soit visible aux utilisateurs !
Pour cela, il existe plusieurs méthodes :
  • Utilisation d’un service avec l’aide d’un ServiceSyndicationLibrary (depuis le Framework 3.5)
  • Utilisation d’un HttpHandler (expliqué dans le prochain post)
Posted: Nov 23 2008, 13:35 by bertrandv | Comments (2) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | C#

[Perso]La certification ASP.NET 3.5 dans l’escarcelle !!

Et voilà, après 4 mois de travail acharné sur le projet de plateforme de formation à distance pour la Communauté Européenne, je viens de réussir la certification ASP.NET 3.5 !

Me voilà donc MCTS Microsoft .NET Framework 3.5, ASP.NET Application Development.aspnet35

Posted: Oct 10 2008, 18:27 by bertrandv | Comments (1) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | Certifications | Privé