Wilfried Woivré & .Net

Administrer, et modifier son site sur Wordpress

JUIN17

On a vu dans un article précédent, comment déployer Wordpress sur Azure en quelques clics, et très peu de temps, si vous ne savez toujours pas comment faire, voici un peu de lecture

 

Commençons déjà par nous rendre sur le nouveau portail Windows Azure, puis dans la partie Web Sites, choisissez votre site fraichement déployé. On peut donc voir ci dessous, le tableau de bord de notre application.

 

image

 

Ce tableau de bord, nous permet donc de rapidement visualiser les ressources utilisées par son site internet au niveau de notre instance. Ici par exemple on voit que mon Wordpress ne prend que 13,20Mb de place sur les 1024 qui me sont attribués.

 

Il est possible de voir aussi les différentes informations de monitoring récupérés sur notre site, comme par exemple le temps CPU, il est possible de configurer les données affichées dans ce graphique dans l’onglet Monitor, il est possible de rajouter des compteurs sur les différents types d’erreurs http, ou les requêtes effectuées avec succès sur notre site.

 

La partie de configuration nous permet de configurer les différents frameworks installés comme la version de .Net disponibles, et si PHP est activé. Il est possible de gérer aussi l’activation des logs, et on peut gérer les différentes clés de configuration associé au site.

 

Maintenant la partie qui me semble le plus intéressant, c’est la partie liée à la montée en charge de votre site :

 

image

 

En effet, c’est via cette interface qu’il est possible de soit utilisé des instances réservés ou des instances partagées, en gros c’est hébergement dédié ou mutualisé ! Il est d’ailleurs possible de mettre jusqu’à 3 instances de votre site en mode partagé.

Le dernier onglet quand à lui nous permet de voir les ressources liées à notre instance, donc ici notre base de données mysql.

 

Maintenant qu’on a vu ce qu’apporte le portail dans le management de notre site internet, il faut savoir qu’il est aussi possible de modifier notre site via WebMatrix, il suffit pour cela de cliquer sur le bouton WebMatrix dans le menu en bas du tableau de bord. Cela aura pour effet de configurer automatiquement votre WebMatrix afin qu’on puisse éditer simplement notre site.  Il installe par ailleurs une copie locale de notre environnement (mysql …) afin d’effectuer des tests sur notre machine.

 

image

Il est possible par la suite de modifier, le contenu du site, par exemple le thème en y ajoutant du code personnel, comme si dessus au dessus de chaque article :

image

Après avoir validé que vos modifications marchent en local, vous pourrez, effectuer une publication de votre site. Et comme on peut le voir ci dessous, il est possible de faire un package différentiel, et de ne pas redéployer l’intégralité du site à chaque fois

image

 

Dernière bonne nouvelle, la publication est aussi rapide que le déploiement du site, à condition que vous aillez une connexion supérieure à 56K !

Remonter

Déployer Wordpress sur Azure en 3 clics et un café !

JUIN11

Suite à toutes les nouveautés de la plateforme Windows Azure sortie en ce début juin, il y en a une que j’apprécie tout particulièrement, c’est la partie Web Sites, que vous pouvez retrouver sur le tout nouveau portail Azure : http://manage.windowsazure.com

On remarquera au passage, que Silverlight a disparu, et que ça y est vous pouvez y accéder sans à avoir à installer Silverlight !

image

 

Bon et sinon, à quoi ça sert, avant le 7 juin, quand je voulais faire un site web, je créais un nouveau rôle Azure, et c’est parti pour de l’ASP.Net, ou tout autre langage supporté par Windows Azure ! Alors certes c’était pratique on avait la main sur tout ce qui se passait, mais si on voulait installer Wordpress, par exemple, on avait en gros cela à faire : http://www.siteduzero.com/tutoriel-3-519694-deployer-wordpress-sur-windows-azure.html (si le tutoriel n’est pas mis à jour)

  • Création du serveur SQL Azure
  • Création de la base de données SQL Azure
  • Création du compte de stockage
  • Téléchargement  & configuration de Windows Azure Companion
  • Déploiement sur Azure
  • Installation de Wordpress
  • Configuration de Wordpress

 

Bon ce n’était pas les 12 travaux d’Astérix, mais en gros le blog n’était pas en ligne avant une petite demi journée, si on n’a rien oublié !

Bref, maintenant c’es fini, il suffit d’aller dans la partie Web Site, faire New > From Gallery et choisir Wordpress, ou autre chose, la galerie contient aussi Drupal, Orchad

image

 

Il vous suffit ensuite de donner un nom à votre blog, définir dans quel datacenter, vous voulez l’héberger, et utiliser une base de données MySQL existante ou en créer une nouvelle.

 

image

 

Ensuite, configuration du MySQL, soit lui donner un joli nom, et dire ou on le déploie

 

image

 

Alors là il vous suffit de prendre un café, je vous conseille un expresso, que vous avez préparer à l’avance, car ça déploie le tout en 1 à 2 minutes, qui a dit que déployer Wordpress sur Azure ça prenait 1/2 journée !

 

Et voilà, vous avez dorénavant un joli site Wordpress sur Azure, avec une interface d’administration, et un blog par la suite !

image

 

Bref, pour ma part j’avais un Wordpress chez Ikoula avant la refonte de mon blog en .Net, et vous mettez autant de temps à créer votre blog, sauf que derrière vous avez la puissance du Cloud !

Nous verrons dans un autre article, comment le nouveau portail nous permet de gérer nos instances déployés en tant que Web Sites.

Remonter

Silverlight : Communication avec le DOM

JUIN21

Alors un peu de ma vie, récemment au travail on m’a demandé les possibilités d’interaction entre Silverlight et une page ASPX. Donc bon après une réponse brêve et j’espère explicite de ma part, que ce qu’il envisageait de faire est totalement possible, et plus puissant via le code DOM ! Bon après coup, je me suis dis qu’il serait tout de même bien de faire une petite démonstration des possibilités qu’offre Silverlight pour la communication avec le DOM :) Alors on va partir d’une application toute simple qui ne comporte qu’un bouton en XAML. Pour mon projet, j’ai ajouté sur chacune des pages hébergeant mon application Silverlight, une div ayant un ID=”MyDiv”. Nous avons donc ceci lorsque nous lançons l’application : image On voit bien mon bouton, et ma div dans le code DOM. Maintenant, lorsque l’on clique sur le bouton Silverlight on obtient ceci : image On voit bien que sans modifier la page HTML/ASPX dans laquelle est hébergée mon application, le code DOM a bien été modifié. Maintenant voyons l’action engendrée par le click sur le bouton “Create HTML Page”
private void Button_Click(object sender, RoutedEventArgs e)
{
    HtmlElement host = HtmlPage.Document.GetElementById("MyDiv");

    HtmlElement table = HtmlPage.Document.CreateElement("table");
    HtmlElement tr = HtmlPage.Document.CreateElement("tr");

    HtmlElement tdName = HtmlPage.Document.CreateElement("td");
    HtmlElement labelName = HtmlPage.Document.CreateElement("label");
    labelName.SetAttribute("innerText", "Valeur : ");
    tdName.AppendChild(labelName);
    tr.AppendChild(tdName);

    HtmlElement tdValue = HtmlPage.Document.CreateElement("td");
    HtmlElement inputValue = HtmlPage.Document.CreateElement("input");
    inputValue.SetAttribute("type", "text");
    inputValue.SetAttribute("id", "inputValue");
    tdValue.AppendChild(inputValue);
    tr.AppendChild(tdValue);

    HtmlElement tdSubmit = HtmlPage.Document.CreateElement("td");
    HtmlElement inputSubmit = HtmlPage.Document.CreateElement("input");
    inputSubmit.SetAttribute("type", "button");
    inputSubmit.SetAttribute("id", "inputSubmit");
    inputSubmit.SetAttribute("value", "Valider");

    inputSubmit.AttachEvent("onclick", (object s, EventArgs ea) =>
        {
            HtmlElement value = HtmlPage.Document.GetElementById("inputValue");
            String v = value.GetAttribute("value");
            HtmlPage.Window.Alert(String.Concat("Value is : ", v));
        });

    tdSubmit.AppendChild(inputSubmit);
    tr.AppendChild(tdSubmit);

    table.AppendChild(tr);
    host.AppendChild(table);
}
Alors dans ce code, on se sert essentiellement des classes HTMLPage et HTMLElement comme vous pouvez le voir ! Donc dans ce petit bout de méthode, l’on va créer un tableau qui contiendra notre libellé , notre valeur à saisir, et notre bouton valider. On ajoute de plus un évènement au click de son bouton, qui va tout simplement nous afficher une Alerte javascript contenant la valeur de notre textbox. Donc bien, entendu, en Silverlight, on ne peut pas uniquement lire et écrire dans le DOM, on peut aussi appeler des fonctions JavaScript depuis Silverlight et vice-versa, mais cela je vous l’ai montré dans le post précédent. Donc avec tout cela, vous pourrez faire tout ce que voulez pour intégrer correctement des projets Silverlight dans vos applications Web. Je ne vous fournis pas la démo cette fois-ci, puisque tout le code est là :)
Remonter

Virtualisation : Microsoft intègre Red Hat

FÉVR17

Virtualisation : Microsoft intègre Red Hat aux systèmes linux supportés par Hyper-V

  image003

Microsoft propose Hyper-V et System Center VMM 2008 et nombre de clients ont mis en œuvre ces technologies pour rationaliser leurs investissements serveurs, augmenter la disponibilité de leurs systèmes informatiques, et diminuer le temps et le coût de mise à disposition des applications. Cette offre ciblait jusqu’à présent les serveurs Windows et Novell SUSE Linux, dans des conditions de support contractuelles.

Il subsistait, dans certain cas, une barrière à la mise en œuvre de ces technologie, et c’était la possibilité de supporter Red Hat Enterprise Linux au sein d’une machine virtuelle hébergée sur Windows Server 2008 avec Hyper-V ou bien sous Hyper-V Server.

Microsoft et Red Hat annoncent le 16 Février 2009 avoir signé des accords leur permettant de tester et valider leurs systèmes d’exploitation sur leurs hyperviseurs respectifs. Les utilisateurs disposant des contrats de supports pourront donc opérer de telles configurations en production et disposer d’un support technique conjoint pour faire fonctionner Windows Server sur le système de virtualisation de Red Hat Enterprise ou bien pour opérer Red Hat Enterprise Linux dans des machines virtuelles fonctionnant sur Windows Server 2008 avec Hyper-V, ou bien sur Hyper-V Server.

Pour atteindre cet objectif, Red Hat a rejoint le programme “Server Virtualization Validation Program” de Microsoft, et Microsoft est désormais un partenaire de Red Hat pour l’interopérabilité et le support de la virtualisation. Microsoft figurera donc dans la “Red Hat Hardware Certification List” dès qu’ils auront passé le processus de certification Red Hat au cours du second semestre 2009. De plus, Microsoft publiera les composants d’intégration Linux pour RHEL dès que les tests et la validation seront finalisés. De fait, non seulement les utilisateurs bénéficieront d’un support technique croisé, mais aussi de technologies de virtualisation optimisées.

Dès que ce support sera effectif, REHL x86 & x64 en version 5.2 et 5.3 complétera donc la liste des systèmes d’exploitation supportés par Microsoft dans des machines virtuelles sur Hyper-V:

Windows Server 2008 x64 (VM configured with 1-, 2-, or 4 virtual processors SMP)
Windows Server 2008 x86 (VM configured with 1-, 2-, or 4 virtual processors SMP)
Windows Server 2003 SP2 x86 (VMs configured with 1- or 2 virtual processors SMP only)
Windows Server 2003 SP2 x64 (VMs configured with 1- or 2- virtual processors only)
Windows Server 2000 SP4 (VMs configured with 1- virtual processors only)
Windows HPC Server 2008
SUSE Linux Enterprise Server 10 with Service Pack 2 x86 Edition
SUSE Linux Enterprise Server 10 with Service Pack 2 x64 Edition
SUSE Linux Enterprise Server 10 with Service Pack 1 x86 Edition
SUSE Linux Enterprise Server 10 with Service Pack 1 x64 Edition

Pour plus d'informations, veuillez consulter le blog Microsoft suivant, http://blogs.technet.com/virtualization/archive/2009/02/15/Microsoft-and-Red-Hat-Joint-Technical-Support.aspx

 

 

Remonter

Silverlight et l’accès aux bases de données

FÉVR4

Lors de la création d'un projet, il y a toujours une question qui revient c'est celle sur l'accès aux données.

En effet comment accède-t-on aux données depuis une application aujourd'hui ?

  • Un accès direct à la base de données
  • Un Web Service
  • WCF et ses différents types de binding

Mais pour ce qui est de Silverlight, il est évident qu'on ne peut pas utiliser tous ces types d'accès, en effet on a jamais vu une application cliente se connecter directement à une base de données.

De plus, à quelle base de données peut-on se connecter, car j'espère que tout le monde qui lis ce post sait qu'on peut ajouter des modules Silverlight aussi bien dans une page aspx (ASP.Net) qu'une bonne page html.

Alors personnellement, j'ai utilisé des méthodes aussi libre que propriétaire. C'est à dire une base de données MySQL, un accès direct aux données via diverses pages en php qui génèrent des données XML récupérées dans mon application Silverlight via l'accès aux pages php en question. Où une solution plus propriétaires, soit Sql Serveur 2008, un accès aux données avec Linq To Sql, et un service WCF pour diffuser les données.

Donc je me suis dis une petite démo pour les deux méthodes, histoire que vous puissiez tous profiter de ces exemples pour vos futures applications. De plus, vous pourrez trouver à la fin de ce post un lien pour télécharger les différentes sources utilisé pour la création de cet article.

Commençons par la solution gratuite, c'est à dire MySQL + PHP + Silverlight avec un petit schéma pour une compréhension plus facile.

Alors il faut penser à l'accès aux données et aux envois des nouvelles données à notre base.

Donc pour l'accès à la base en PHP, je vais supposer que tout le monde sait faire (enfin si vous ne savez pas, ce n'est pas grave vous n'allez pas en mourir). Mais en gros il faut créer un XML pour qu'on puisse le lire à travers notre application Silverlight

while ($line = mysql_fetch_assoc($result))
{
echo "<Favori>";
$id = $line["Id"];
echo "<id>".$id."</id>";
echo "<Lien>".utf8_encode($line["Lien"])."</Lien>";
echo "<Libelle>".utf8_encode($line["Libelle"])."</Libelle>";
echo "<Auteur>".utf8_encode($line["Auteur"])."</Auteur>";
echo "</Favori>";
}

Vous obtenez grâce à cette boucle une syntaxe XML de ce type, pour une entité Favori :

<Favori>

<id>1</id>

<Lien>http://etudiants.ms</Lien>

<Libelle>Site Microsoft étudiants</Libelle>

<Auteur>Microsoft</Auteur>

</Favori>

Maintenant viens la récupération de ce code XML au travers de l'application Silverlight, j'utilise donc un Helper pour récupérer ces valeurs via un WebClient, puis je traite les données récupérées via un LinqToXML, et ensuite les utiliser à bon escients dans mon application.

Pour la récupération en LinqToXML, j'ai utilisé une requête assez simple que voici :

var elements = xmlElements.Descendants("Favori").Select(favori => new

{

Id = (int)favori.Element("id"),

Auteur = ((string)favori.Element("Auteur")).Trim(),

Libelle = ((string)favori.Element("Libelle")).Trim(),

Lien = ((string)favori.Element("Lien")).Trim()

});

Voilà pour la récupération des données avec cette méthode, et maintenant voyons comment envoyé des données au serveur, car après tout un échange se fait dans les deux sens.

Alors pour l'envoi des données, j'ai aussi utilisé un Helper pour envoyer les données.


HttpHelper helper = new HttpHelper(new Uri("http://myWebSite/setFavori.php"), "POST"

, new KeyValuePair<string, string>("Favori", null)

, new KeyValuePair<string, string>("Favori_Libelle", "Imagine Cup Student Competition 2009")

, new KeyValuePair<string, string>("Favori_Lien", " http://imaginecup.com")

, new KeyValuePair<string, string>("Favori_Auteur", "Microsoft"));

helper.ResponseComplete += new HttpResponseCompleteEventHandler(helper_ResponseComplete);

helper.Execute();

En fait le but de ce helper est d'ajouter les données dans différentes données à poster selon le type de méthode voulue, ici en mode « POST », pour plus de détails voici le constructeur utilisé ci-dessus.


public HttpHelper(Uri requestUri, string method, params KeyValuePair<string, string>[] postV alues)

{

Request = (HttpWebRequest)WebRequest.Create(requestUri);

Request.ContentType = "application/x-www-form-urlencoded";

Request.Method = method;

PostValues = new Dictionary<string, string>();


if (postValues != null && postValues.Length > 0)

{


foreach (var item in postValues)

{

PostValues.Add(item.Key, item.Value);

}

}

}

On récupère ensuite ces différentes données via le fichier setFavori.php, puis on les ajoute à la base de données MySQL via un code de ce type, on remarquera par ailleurs que mon niveau en PHP n'est pas très élevé.

if (isset($_POST["Favori"]))

{

$Libelle = mysql_real_escape_string($_POST["Favori_Libelle"]);

$Lien = mysql_real_escape_string($_POST["Favori_Lien"]);

$Auteur = mysql_real_escape_string($_POST["Favori_Auteur"]);

$query = "INSERT INTO `Flux` (`Id`, `Libelle`, `Lien`, `Auteur`) VALUES (NULL, '".$Libelle."', '".$Lien."', '".$Auteur."')";

$result = mysql_query($query);

if(!result)

echo "ERR2";

}

On effectue donc l'ajout en base, et on écrit un code d'erreur qui sera lu par l'application Silverlight afin d'informer l'utilisateur d'un éventuel souci.

Passons maintenant à la partie « Full Microsoft », une solution où d'ailleurs je me sens plus à l'aise, peut-être du au fait que j'ai rarement fait du PHP durant ma carrière de développeur. Donc pour commencer un petit schéma du fonctionnement de l'exemple.

Donc avant tout un LinqToSql, dont voici le fichier dbml qui est comme vous pouvez le voir assez succinct.

Et oui, encore l'exemple du favoris, on remarque que cela change de l'exemple de la personne J

On construit ensuite le WCF, je vais passer sur la création d'un service WCF puisque ce n'est pas le but de cet article, mais néanmoins voici les différentes méthodes exposées sur le Web Services.


///<summary>

/// Récupère la liste des favoris de la base

///</summary>

///<returns></returns>
List<WCF_DataContract.Favori> WCF_Interface.IService.SelectAllFavoris()

{
if (db != null && db.DatabaseExists())

{
var query = from f in db.Favoris

select new WCF_DataContract.Favori

{

Id = f.IdFavori,

Libelle = f.Libelle,

Auteur = f.Auteur,

Lien = new Uri(f.Lien)

};


return query.ToList();

}

< span="" style="font-family:courier new;font-size:10pt;">
return null;

}


///<summary>

/// Insère un favori dans la base et retourne son id

///</summary>

///<param name="obj"></param>

///<returns></returns>
void WCF_Interface.IService.insertFavori(WCF_DataContract.Favori obj)

{


if (db != null && db.DatabaseExists())

{


Favori f = new Favori()

{

Lien = obj.Lien.AbsoluteUri,

Auteur = obj.Auteur,

Libelle = obj.Libelle

};

db.Favoris.InsertOnSubmit(f);

db.SubmitChanges();

}

}

Donc on peut voir ci-dessous, la méthode pour insérer et pour récupérer tous les éléments de la liste.

Pour publier notre service WCF dans notre site web, rien de plus, il faut configurer le fichier de configuration correctement, et créer un fichier « .svc » après bien entendu avoir ajouter toutes les références nécessaire.

Voici les données du fichier de configuration :

<system.serviceModel>

<services>

<service name="WCF_Services.Service" behaviorConfiguration="MyServiceTypeBehaviors">

<endpoint address="" binding="basicHttpBinding" contract="WCF_Interface.IService" />

</service>

</services>

<behaviors>

<serviceBehaviors>

<behavior name="MyServiceTypeBehaviors">

<serviceMetadata httpGetEnabled="true" />

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

Et le contenu du fichier « .svc » : <%@ ServiceHost Service="WCF_Services.Service" %>

Bien entendu, l'implémen tation d'un service WCF peut être bien plus compliquée selon les besoins du projet.

Passons au projet Silverlight, on ajoute une référence à notre service WCF précédemment crée, comme le montre l'écran ci-dessous.

Pour la récupération de tous les favoris, on utilise donc ces différentes méthodes :


private ServiceClient client;


public void Load()

{

client = new ServiceClient();

client.SelectAllFavorisCompleted += new EventHandler<SelectAllFavorisCompletedEventArgs>(client_SelectAllFavorisCompleted);

client.SelectAllFavorisAsync();

}


void client_SelectAllFavorisCompleted(object sender, SelectAllFavorisCompletedEventArgs e)

{
var MyList = e.Result.ToList();

client.CloseAsync();

}

La variable MyList contient dorénavant toutes les données de la base.

Note : Il ne faut pas oublier de fermer la connexion avec le service WCF afin de libérer les ressources, pour qu'elles soient nettoyés par le Garbage Collector.

Donc voici, comme promis les sources de la solution sur ce lien.

Alors pour conclure ce post, on peut dire que voici deux solutions diverses pour accéder à des bases de données depuis Silverlight, on peut bien entendu envisager à partir de ces exemples toutes les possibilités immaginables et réalisables ce qui ne rendra pas vos applications Silverlight isolée sur le poste de l'utilisateur final.

Wilfried Woivré

Remonter