Autoriser le téléchargement de fichiers avec une extension non répertoriée sous IIS7

Après quelques recherches, et suite à une demande d’un client ayant besoin de proposer en téléchargement des fichiers avec une extension .cgi_ ou .exe_ , j’ai trouvé qu’il ne suffisait pas de rajouter ces lignes dans le fichier web.config du site :

<system.webServer>
<handlers>
<add name="Client cgi" path="*.cgi_" verb="*" modules="StaticFileModule" resourceType="File" />
<handlers>
<system.webServer>

Il fallait aussi ajouter l’extension dans les types MIME (comme sous IIS6) via ce bloc toujours dans <system.webServer> :

<staticContent>
<mimeMap fileExtension=".cgi_" mimeType="application/octet-stream" />
</staticContent>

En espérant que cela fasse gagner du temps à certains d’entre vous 😉

Composant NeatUpload en SSL

Vu que j’ai passé quelques heures à chercher une solution à ce pb, et si vous rencontrez le même souci que moi sur un site ASP.Net, voici le code que j’ai dû rajouter dans mon fichier « global.asax » pour faire fonctionner ce très pratique composant sur un site protégé par un certificat SSL auto-signé :

public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
public TrustAllCertificatePolicy()
{ }

public bool CheckValidationResult(ServicePoint sp,
X509Certificate cert, WebRequest req, int problem)
{
return true;
}
}

void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
}

Pensez à rajouter ça au début également :

<%@ Import Namespace= »System.Net » %>
<%@ Import Namespace= »System.Security.Cryptography.X509Certificates » %>

Génération dynamique d’image en .Net et sauvegarde

Petite astuce pour ceux qui ont besoin de générer des images sur leur site web, et qui veulent permettre aux visiteurs de les sauvegarder. Pensez-bien à utiliser comme « Content-type » le type « image/jpeg », et non une variante comme « Image/Jpg » par exemple. Cela provoquerait une erreur lors de la sauvegarde dans les navigateurs pointilleux sur ce point (comme IE7).

ASP.NET 3.5 et Visual Studio 2008

La sortie de Visual Studio 2008 s’accompagne également de nombreuses nouveautés concernant ASP.Net . N’ayant pas eu le temps d’essayer les différentes versions beta, je vais les tester directement sur la version finale, et vous pouvez trouver la liste de toutes les nouveautés et les explications associées à cette adresse : http://www.asp.net/downloads/vs2008/ 

Parmi les nouveautés, les nouveaux contrôles « ListView » et « DataPager » promettent de faire gagner beaucoup de temps sur mes développements, et on va certainement se demander rapidement comment on a pu se passer du langage d’interrogation des données LINQ.

Tout ça va donner un coup de vieux aux plateformes alternatives, en tout cas de mon point de vue et de celui de beaucoup de développeurs 😉

Côté Visual Studio proprement dit, le moteur du « web designer » est emprunté à celui du logiciel « Expression Web Designer », avec un excellent support des CSS. Le débogage de Javascript va être également beaucoup plus simple, et on a enfin la possibilité de choisir la version du framework que l’on souhaite viser. Ceci permettra de maintenir les « vieux » projets sans multiplier les versions de Visual Studio …

Téléchargement de fichiers en ASP.Net avec la compression activée dans IIS6

Depuis pas loin d’une semaine, j’essayais de comprendre pourquoi mon code, qui fonctionnait très bien sur un autre serveur auparavant, ne permettait pas à un utilisateur de voir la taille du téléchargement d’un fichier que j’envoyais depuis une page ASPX. Le téléchargement se passait bien, mais l’utilisateur ne pouvait pas savoir où il en était de son téléchargement, et comme les fichiers en question sont volumineux …

Mais j’ai trouvé la solution ce matin 🙂

En fait, ça venait du fait que la compression était activée sur notre nouveau serveur web, et même en spécifiant le header « Content-Length », la compression perturbait l’interprétation de cette entête.

L’astuce est ici de désactiver la compression uniquement pour un fichier, ce qui n’est pas intuitif non plus, et voici la marche à suivre (traduit de cet article http://www.technoag.com/2006/10/25/iis6-http-compression-ie-6-pdf-trouble/ ) :

  1. Ouvrir le gestionnaire IIS sur le serveur
  2. Naviguer juqu’au fichier ASPX sur lequel on veut désactiver la compression
  3. Ouvrir le fichier et faire un léger changement (par exemple, si dans l’onglet sécurité, l’accès anonyme est activé, ajoutez l’authentification de base, afin que le fichier apparaisse comme une exception dans la metabase IIS)
  4. Ouvrir une invite de commande et placez-vous dans le répertoire « c:\inetpub\AdminScripts »
  5. Lancez les commandes suivantes pour désactiver la compression sur ce fichier :

cscript adsutil.vbs set W3SVC/[#]/Root/[PathToFile]/DoStaticCompression False

cscript adsutil.vbs set W3SVC/[#]/Root/[PathToFile]/DoDynamicCompression False

Où [#] est l’identifiant du site dans IIS (Allez dans les sites web dans le gestionnaire IIS et regarder l’identificateur dans la colonne de droite)

Et

Où [PathToFile] est le chemin depuis la racine de votre application web vers le fichier ASPX (ou un autre fichier) sur lequel vous souhaitez désactivez la compression .

 Et voilà 😉 En plus, le téléchargement est beaucoup plus rapide avec la compression désactivée.

Asp.Net 2 par défaut avec IIS 6

Ayant récemment configuré un nouveau serveur sous Windows Server 2003, j’ai cherché un moyen pour que les sites web soient par défaut associés à la V2 du framework .Net .

La solution est simple, il suffit de lancer la commande suivante (adaptez le chemin de l’exécutable pour votre serveur):

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

Par contre, je n’ai pas osé le faire sur un serveur qui tournait déjà, car si vous avez des sites qui tournent encore avec la version 1.1, c’est plus compliqué … possible mais plus long.

ASP.Net Rss Toolkit 2.0 générant un flux valide W3C

J’avais parlé récemment de la nouvelle version de « l’ASP.Net RSS Toolkit » en disant qu’il était très pratique à utiliser. Si c’est vrai pour afficher un flux RSS existant et même pour le générer, il nécessite plusieurs adaptations si on veut fournir facilement un flux RSS valide à nos clients.

On trouve la plupart des réponses dans les discussions du projet sur CodePlex, mais voici déjà une petite astuce pour vous faciliter le travail :

  • pour le contenu de l’attribut « link », vous pouvez utiliser l’objet RssXmlHelper comme ceci :

RssXmlHelper.ResolveAppRelativeLinkToUrl(« ~/rss.aspx »);

  • et pour mettre les dates au format RFC 822, c’est aussi simple :

RssXmlHelper.ToRfc822(System.DateTime.Now)
Bons flux RSS 😉

Positionner le focus sur un champ à l’intérieur d’un UpdatePanel

Comme j’utilise de plus en plus Ajax, et en particulier via les « UpdatePanel », j’ai été confronté à l’impossibilité de positionner le focus sur un champ avec la classique méthode « SetFocus() ».

L’astuce est en fait d’utiliser ce code, plus long mais qui marche à l’intérieur ou à l’extérieur d’un UpdatePanel 🙂

System.Web.UI.ScriptManager.GetCurrent(this).SetFocus(ID_du_controle);