XML et XSLT en dotNet


 5/27/2015

Exemple simple de l'utilisation de xml et xslt :

Fichier XML :

<?xml version="1.0" encoding="iso-8859-1"?>
<personnes>
  <personne>
    <name>Toto</name>
    <age>15</age>
    <city>Paris</city>
  </personne>
  <personne>
    <name>Dupont</name>
    <age>59</age>
    <city>Rennes</city>
  </personne>
  <personne>
    <name>Durand</name>
    <age>46</age>
    <city>Toulouse</city>
  </personne>
  <personne>
    <name>Martin</name>
    <age>35</age>
    <city>Lyon</city>
  </personne>
</personnes>

Fichier XSLT :

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h2>Personnes</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Name</th>
            <th>Age</th>
            <th>City</th>
          </tr>
          <xsl:for-each select="personnes/personne">
            <tr>
              <td bgcolor="yellow">
                <xsl:value-of select="name"/>
              </td>
              <td>
                <xsl:value-of select="age"/>
              </td>
              <td>
                <xsl:value-of select="city"/>
              </td>
            </tr>
         
...

Lire >>

Récupérer une url dans une chaine de caractère, ici object


 5/27/2015

Dans cette exemple, la chaine de caractère commence par <object, contient une url qui commence par http et se termine par "

<object.....blablabla......."http://lesite.com/gs4545?id=8" ....... blablabla.......</object>

Pour récupérer l'url il suffit d'utiliser ce code :

string theUrl = fullUrl.Substring(fullUrl.IndexOf("http")).Split('"')[0];

Lire >>

Calculer le temps d'exécution d'une méthode


 5/27/2015

using System.Diagnostics;

Stopwatch sw = new Stopwatch();
sw.Start();

« La méthode à exécuter »

sw.Stop();

Console.WriteLine("Temps d'éxécution : " + sw.Elapsed.Minutes + " minutes, " + sw.Elapsed.Seconds + " secondes, " + sw.Elapsed.Milliseconds + " milliseconds");

Lire >>

Simple Client/Serveur TCP

Tags: Réseau

 5/27/2015

Voici les bases pour implémenter un client/serveur TCP en c# :

Le client :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;
 
public class Client
{
    public static void Main(string[] args)
    {
        try
        {
            string adresseIp = "Votre IP";
            int port = 8001;
 
            TcpClient client = new TcpClient();
            Console.WriteLine("Connexion.....");
            client.Connect(adresseIp, port);
            Console.WriteLine("Connecté");
           
            string chaineAenvoyer = string.Empty;
            while (chaineAenvoyer.ToLower() != "quit")
            {
                Console.WriteLine("\nChaine a envoyer : ");
                chaineAenvoyer = Console.ReadLine();
 
                Stream stream = client.GetStream();
                ASCIIEncoding encoding = new ASCIIEncoding();
 
                byte[] byteAenvoyer = encoding.GetBytes(chaineAenvoyer);
                Console.WriteLine("Transmission.....");
                stream.Write(byteAenvoyer, 0, byteAenvoyer.Length);
                byte[] byteEnvoyes = new byte[100];
                int nbBytes = stream.Read(byteEnvoyes, 0, 100);
                for (int i =
...

Lire >>

BlogEngine - Remplacer la page Default.aspx


 5/27/2015

Si l'on modifie la page Default.aspx, la redirection des catégories et des tags ne fonctionnera plus.

Cela se produit si l'on désire intégrer un site web au blog par exemple.

Solution :

Dans le code les redirections se font vers la page Default, il faut donc renommer ces redirections vers la nouvelle page.

On va dire que la nouvelle page se nomme blog.aspx et que la page Default.aspx n'est plus lié au blog.

1) Il faut travailler sur le code source de BlogEngine :

- Ouvrir le fichier /Web/HttpModules/UrlRewrite.cs

- Renommer default.aspx par blog.aspx, SAUF le bloc à partir de la ligne 238 (pour la version 2.5, à 8 endroits environ) :

else 

{

string newUrl = url.Replace("Default.aspx", "default.aspx");  // fixes a casing oddity on Mono
int defaultStart = url.IndexOf("default.aspx", StringComparison.OrdinalIgnoreCase);
newUrl = Utils.ApplicationRelativeWebRoot + url.Substring(defaultStart);
 
context.RewritePath(newUrl);
}

- Rajouter devant ?tag le nom du nouveau fichier, à la ligne 198 : ?tag remplacer par : blog.aspx?tag

- Ouvrir le fichier /Web/Controls/PostViewBase.cs

- Rajouter devant ?tag le nom du nouveau fichier, à la ligne 343 : ?tag remplacer par blog.aspx?tag

- Compiler la solution, remplacer la DLL BlogEngine.Core.dll par la nouvelle

...

Lire >>

Récupérer les détails d'un utilisateur depuis l'Active Directory


 5/27/2015

Activer les roles dans le web.config (System.Web) :

<authentication mode="Windows" /> 

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
Ajouter les références suivantes :
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;

1) Récupérer le login de l'utilisateur :

public static string GetUserName()
{
return HttpContext.Current.User.Identity.Name;
}

 

2) Récupérer le prénom de l'utilisateur :

public static string GetFirstName()
{
string principal = GetUserName();
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx,principal);
return user.GivenName;
}

A partir de cette méthode, tout est récupérable, il suffit de changer le GivenName par la propriété correspondante.

 

3) Tester un droit pour l'utilisateur connecté :

Après avoir ajouté cette chaine dans le web.config :
<appSettings>
……
<add key="admin" value="Domaine\Droit"/>
</appSettings> 
public static bool UserIsAdmin()
{
return Roles.IsUserInRole(ConfigurationManager.AppSettings["admin"]);
}

Lire >>

View state persistant


 5/27/2015

Voici le moyen de rendre persistant un view state lors de différents postback au sein de la même page :
public string TheProperty
{
get
    {
string text = (string)ViewState["TheProperty"];
if (text != null)
return text;
else
return string.Empty;
}
set
{
ViewState["TheProperty"] = value;
}
}

Lire >>

Détecter l'état d'un CollapsiblePanel, collasped ou expand


 5/27/2015

// Est il est fermé

if (cpe.ClientState == "true")
{
 
}

 

// Est il est ouvert

if (cpe.ClientState == "false")
{
 
}

Lire >>