ASP.NET : L'impersonation

Mécanique de l’impersonation en ASP : pratique, mais pas simple…
L’impersonation signifie le fait de choisir sous quel compte seront exécutés les processus ASP.
Dans le web.config, la ligne suivante :
<identity impersonate="true" />
Signifie que le compte qui s’est connecté à IIS sera utilisé pour exécuter la logique côté serveur.
ATTENTION : Si le site est en accès anonyme, alors c’est le compte du pool d’application qui est utilisé (il en faut bien 1 !).
On peut forcer le compte utilisé pour l’impersonation :
<identity impersonate="true" userName="DOMAINusername" password="aaa"/>
Ceci n’empêche pas le compte Windows de se connecter au site, mais ce sera DOMAINusername qui exécutera la logique.
Du côté des sources :
HttpContext.Current.User : Renvoie le compte connecté à IIS (Windows intégré, anonyme, etc.) Quelque soit l’impersonation choisie.
WindowsIdentity.GetCurrent() : Renvoie le compte qui exécute la logique. Donc si l’impersonation est à « true » dans le web.config, on aura le même compte que Current.User…
Enfin, en cours d’excution, on peut décider que le compte connecté sera celui qui sert à l’impersonation :
WindowsIdentity ident = (WindowsIdentity)HttpContext.Current.User.Identity; // On caste avant...
ident.Impersonate();
Si jamais le Current.User était un accès anonyme, une exception surgit : « Une identité anonyme ne peut pas exécuter un emprunt d’identité. »
CQFD.

ASP.NET : Renvoyer un ContentType différent (excel, CSV, doc…)

ASP.NET : Renvoyer un ContentType différent (C#)
Quelques conseils quand une page renvoie un flux différent que du  "text/html" :

  • Préciser l’encoding : Response.ContentEncoding = System.Text.Encoding.Default;
  • Générer le contenu dans le Page_Load, et finir par : Response.End();
  • Exemple :

 protected void Page_Load(object sender, EventArgs e)
{

Response.Clear();
// Type de contenu de la réponse
Response.ContentEncoding = System.Text.Encoding.Default;
Response.Charset = "iso-8859-1";
Response.ContentType = "text/csv";

// Entête
Response.AddHeader("Pragma", "no-cache");
        // Force le navigateur à faire un "enregistrer sous..."
Response.AddHeader("Content-Disposition", "attachment; filename="fichier.csv"");
// Corp de la réponse
Response.Write("bla bla bla");
// Pas de cache
Response.CacheControl = "no-cache";
Response.Expires = -1;
Response.End();

}

NB : Dans le corps de la réponse, pour faire des retours à la ligne « propres », il faut utiliser : System.Environment.NewLine

SharePoint : Exception lors de la mise à jour de la configuration d'une application web

Le dysfonctionnement d’un serveur frontal perturbe la propagation de la configuration SharePoint.
Symptôme
L’erreur suivante peut survenir lors de la mise à jour d’une application web via l’administration centrale (mappage, accès anonyme, extension de site, etc.) :
Un objet de type Microsoft.SharePoint.Administration.SPWebApplicationProvisioningJobDefinition appelé « Provisioning xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx » existe déjà sous le parent Microsoft.SharePoint.Administration.SPWebService appelé «  ». Renommez votre objet ou supprimez l'objet existant.
Explication
Ceci peut être du au fait qu’un serveur de la ferme (web frontal) n’est plus accessible par l’administration. Du coup, les jobs de propagation de configuration restent en échec.
Résolution

  •   Vérifier pourquoi l’un des serveurs n’est plus accessible, et régulariser la situation.
  •   Supprimer tous les jobs de type « Job provisionning » via l’administration centrale > Opérations > Définitions des travaux du minuteur > « Mise en service de l’application web… »
  •   … ou avec l’outil SharePoint Manager 2007, sous « <ROOT>/Services/Application Web de Windows SharePoint Services > Job Definitions ».

NB : Même topo pour les exceptions concernant SPWebApplicationUnProvisioningJobDefinition.

ColorSeeds : new version 2.0 available !

UPDATED.
ColorSeeds 2.0 is now available on the marketplace.
This update includes :
– Bug fixes,
– 10 new levels (called « The tricky ones »),
– The 56 original levels are now called « The 56 wonders ». Some of them (too easy) have been redone.
The Infinite mode (?!)
– A new background image and a new menu screen.
This comes as an update to the current owners.
The former version 1.2 is now available for free.