Archives pour la catégorie .NET

Windows 8.1 : attentes

Maintenant que Windows 8.1 est annoncé, à quoi pouvons-nous nous attendre ?

Voici ce que je pense faire partie de la nouvelle version de Windows 8.1:

  • Beaucoup de nouvelles APIs : Windows 8 manque de certaines simplifications dans son développement, qui devraient être enrichies de nombreux nouveaux ajouts,
  • De nouvelles tailles de tuiles: comme l’a fait Windows Phone 8, un nouveau set de tailles tuiles pour enrichir encore plus l’interface de Windows 8.1,
  • Performance : comme toute nouvelle version de système, une mise à jour vient aussi avec son lot d’améliorations, surout en ce qui concerne la partie Modern UI, qui est assez récente comparé au noyau de Windows lui-même.

Nous verrons bien d’ici quelques jours !

{« Message »: »An error has occurred. »} en déployant votre site web Windows Azure

Je travaillais ces jours-ci sur le déploiement de quelques sites développés sur MVC4 API Web, en utilisant Entity Framework avec les types spatiaux (types Geometry et Geopraphy).

Tout allait bien sur ma machine de dev, mais cela ne fonctionnait as en déployant ma solution sur Azure.

La plupart de mes appels WebAPIs me donnaient comme erreur: {« message »: « An error has occurred. »}

Cela provient d’une assembly manquante dans les binaires qui sont déployés avec votre site.

Il suffit d’ouvrir votre gestionnaire de packages Nuget, de chercher le package « Microsoft.SqlServer.Types » et de l’ajouter à votre projet.

Tada :)

Faites que le titre de vos webparts soit localisable

Dans de nombreux projets traitant de localisation, j’ai du localiser le contenu de WebParts, de User Controls ou d’Application Pages, et SharePoint 2010 au travers des APIs de ASP.NET le permet assez bien.

Mais pour localiser le titre d’une WebPart, là… Il n’y a pas vraiment de solution toute faite.

J’ai donc pris mes petites mains et j’ai écrit une joli classe abstraite, qui flanquée de quelques classes helper me permet de faire ceci; il me suffit tout simplement d’hériter de ma nouvelle classe LocalizableWebPart et le tour est joué !

Une fois la webpart héritée, il suffit de changer l’héritagede ses WebParts customs de WebPart en LocalizableWebPart.

Pour exemple, le code de cette classe:

public abstract class LocalizableTitleWebPart : WebPart
{
    [WebPartStorage(Storage = Storage.Shared)]
    public string LocalizedTitle { get; set; }

    private LangageContainer langContainer = null;

    protected string GetLocalizedProperty(LangageContainer container, string content)
    {
        if (container != null)
        {
            return container.GetOrInsertLanguage().EncodedLanguageContent;
        }
        else
        {
            container = LocalizationHelper.GetLanguagesContent(content);
            return container.GetOrInsertLanguage().EncodedLanguageContent;
        }
    }

    protected string SetLocalizedProperty(LangageContainer container, string content, string value)
    {
        container = LocalizationHelper.GetLanguagesContent(content);
        var lang = container.GetOrInsertLanguage();

        if (this.Page != null && this.Page.IsPostBack)
        {
            container.UpdateLanguage(lang.LanguageCode, value);
            return LangageContainer.Serialize(container);
        }
        return content;
    }

    public override string Title
    {
        get
        {
            return GetLocalizedProperty(langContainer, this.LocalizedTitle);
        }
        set
        {
            this.LocalizedTitle = SetLocalizedProperty(langContainer, this.LocalizedTitle, value);
        }
    }
}

Ce que vous pouvez voir dans le code au dessus:

  • une propriété WebPart automatiquement persistée qui stocke le contenu des langues du titre en XML,
  • deux méthodes pour récupérer et sauvegarder la valeur de la langue courante.

Vous pouvez trouver le code de cette classe avec un exemple de WebPart dans le repo Git suivant:

https://github.com/JaYmZ666/localizableTitleWebPart

Happy coding!

Rejoignez-nous aux Techdays 2013 à Lausanne !

Cher visiteur,

Cette année, les Microsoft Techdays se tiendront Conrès Beaulieu à Lausanne, du 6 au 7th novembre.

Yves Peneveyre et moi même vous présenteront une session autour de la gestion de contenu web avec SharePoint 2013.

Je serai présent sur le stand de CTP pour ceux qui souhaiteraient aborder plus longuement les sujets de notre sessions ou encore tout ce qui touche au Cloud Computing :)

Au plaisir de vous rencontrer là-bas !

Access Control Service : créer et utiliser son propre STS dans Azure – Part 2

Dans cette série d’article, nous allons voir comment créer votre Security Token Service (STS) custom pour authentifier vos utilisateurs en utilisant des Claims, en passant au travers d’ACS,

Cette série d’articles est composée de:

  1. Créer votre STS en tant que Web Application (et non un Website!)
  2. Créer et configurer vos certificats dans votre STS  ← Vous êtes ici!
  3. Comprendre la syntaxe du fameux fichier FederationMetadata.xml
  4. Mettre en place votre solution utilisant votre STS au travers d’ACS
  5. Installez votre solution (WebApp + STS) dans Windows Azure

2. Créer et configurer vos certificats dans votre STS

Nous allons voir ici ensemble comment créer, puis utiliser les certificats pour votre STS, ceci inclut :

  • la génération d’un certificat de test pour que votre STS communique avec vos clients en HTTPS et signe le contenu de ses tokens,
  • la génération d’un certificat pour encrypter vos tokens envoyés depuis votre STS vers ACS.

Continuer la lecture de Access Control Service : créer et utiliser son propre STS dans Azure – Part 2 

Access Control Service : créer et utiliser son propre STS dans Azure – Part 1

Dans cette série d’article, nous allons voir comment créer votre Security Token Service (STS) custom pour authentifier vos utilisateurs en utilisant des Claims, en passant au travers d’ACS,

Cette série d’articles est composée de:

  1. Créer votre STS en tant que Web Application (et non un Website!) ← Vous êtes ici!
  2. Créer et configurer vos certificats dans votre STS
  3. Comprendre la syntaxe du fameux fichier FederationMetadata.xml
  4. Mettre en place votre solution utilisant votre STS au travers d’ACS
  5. Installez votre solution (WebApp + STS) dans Windows Azure

1. Créer votre STS en tant que Web Application (et non un Website!)

Par défaut, les templates WIF dans Visual Studio 2010 de vous proposerons de créer un Security Token Service site que sous forme d’un Website.

Nous voudrions utiliser ce « Website » en tant que site dans un projet Azure, mais là est le hic : Azure ne supporte d’importer que des project « Web Application »…

Aucun problème, il n’y a rien de compliqué là-dessous : nous allons créer un STS manuellement depuis une nouvelle Web Application. Continuer la lecture de Access Control Service : créer et utiliser son propre STS dans Azure – Part 1 

Windows et WinRT, la nouvelle fondation pour le développement Windows ?

Après ces jours de sessions pour la BUILD de Microsoft qui sont assez chargés, je suis arrivé à poser mes idées sur ma compréhension sur cette nouvelle interface WinRT.

J’ai donc passé pas mal de temps sur les stands des équipes qui ont développé cette plateforme, et je vais essayer d’expliquer ce que j’en ai compris.

En général :

  • WinRT est un set d’objets accessibles pour construire des applications Metro
  • WinRT est accessible depuis C++, .NET (C# & VB), ainsi que Javascript lorsque l’on développe une application Metro
  • WinRT se base, pour ce qui est de la projection des objets natifs, sur un format nommé Windows Metadata (.Winmd); certains objets venant de Win32 ou COM possédant ces métadonnées sont alors exposés pour fournir des services aux applications Métro (voir image)
  • Selon le Runtime qui l’appelle, WinRT donnera l’objet (le même pour tous les runtimes) en l’entourant d’un wrapper permettant l’utilisation de cet objet par ce runtime
  • Cet objet natif venant de WinRT reste un objet Win32 ou COM, seule sa facade permet au runtime qui l’instancier et de l’utiliser

Pour ce qui est des languages :

  • Les parties C++ et Javascript ne voient que les objets WinRT venant du runtime au travers de ces objets exposés depuis leurs Metadatas,
  • Seule la partie C#/VB.NET peut à la fois accéder aux objets natifs exposés par WinRT et à certains objets .NET,
  • .NET accédé dans e cadre de Metro utilise un « Metro Profile » limitant les objets .NET accessibles et certaines de leur utilisation dans le cadre d’une application Metro (ex: charger dynamiquement une assembly venant d’internet),
  • Les objets natifs et managés venant du Framework 4.5 passent par WinRT avant d’être donnés à votre application,
  • Certains objets accessibles depuis .NET dans une application Metro ont été changé pour d’autres, mais de manière complètement transparente (System.String vient maintenant d’un type natif HSTRING, avec toutes les méthodes que vous lui connaissez),
  • Ces deux types d’objets sont « Garbage Collectés » par WinRT lui-même, ce qui fait que même un objet natif n’a pas besoin d’être disposé :),
  • Le XAML écrit dans une application Metro utilise un moteur de rendu XAML entièrement écrit en C++ (nom de code Jupiter), ce qui explique la rapidité et la fluidité de l’interface (GREAT STUFF!),
  • Ces contrôles sont disponibles sous d’autre namespaces que ceux de SL et WPF pour montrer la différence de contrôle,
  • WPF et Silverlight existent toujours sous Windows 8, mais n’utilisent pas Jupiter pour leur rendu, uniquement le framework .NET standard, et seront rendu sur le desktop,
  • Le profile Metro de .NET 4.5 empêche l’utilisation d’objets XAML .NET comme ceux venant des namespaces WPF,
  • Le moteur XAML Jupiter fonctionnant à l’identique et incluant tous les contrôles venant de WPF et Silverlight, il est possible de changer leur style (ex. appliquer le style d’un bouton SL sur un bouton Metro),
  • Seul C++ parmi les langages utilisés solicite moins WinRT pour la partie Metadonnées car ces objets natifs sont plus proches de C++ que des autres runtimes,
  • Il est possible d’écrire son propre code C++ utilisant le SDK de WinRT et ensuite de l’utiliser dans du code .NET ou JavaScript,
  • Les contrôles XAML pour Metro supportent tous deux les évènement souris et touch (plus de doublons d’évènement entre ces deux types).

Une fois vu tous ces points, je ne peux m’empêcher de me demander…
WinRT exposant certaines APIs de manière transparent pour un code .NET compilé en « Any CPU » ou un code JavaScript, un portage de WinRT serait tout à fait possible pour Windows Phone, permettant alors à une application de tourner sur tous les devices ave un seul package… Je pense que l’on pourra reparler de toute cela dans pas trop longtemps :)

En bonus, voici l’image du booth des DEVs de la BUILD, avec un schéma intéressant de ce à quoi ressemble la version un peu plus « détaillée » de l’intégration de WinRT avec tout le reste :)

Bon code !!!

Windows 8 est arrivé, et « ça change tout »

Me voila enfin rentre de cette première journée de BUILD, et je dois dire que OUCH j’en ai pris plein les mirettes.

Windows 8 est là et bien là, et il n’y va pas dans la demi mesure pour ce qui est des nouveautés !!

Tout d’abord WinRT (Windows Runtime) : c’est cette interface qui va venir faire la frontière entre le kernel et les langages utilisés. un set complet d’APIs est à disposition et accessible en C++, C#, VB.NET et Javascript!

Voici deux des projections montrant l’utilisation de WinRT dans l’écosystème Windows et les APIs que celui-coi offre :

 
Ce que montre cette dernière photo est que les appels aux APIs exposées pour les Application de type « Metro » se feront à travers WinRT.

Pour le reste, on fera comme à l’habitude avec des accès à des objets Javascript pour la partie HTML5 et aux objets .NET standards pour la partie .NET.

Ensuite, ces applications « Immersives » (ou autrement appelés « Metro Style ») vont avoir 3 façons de s’intégrer aux autres applications (chose inédite et n’existant sur aucun OS) ; Microsoft appelle cela les « Charms »:

  • Rendre son application capable de répondre à une recherche globale (on obtient alors une facette de recherche supplémentaire pour son app),
  • Donner à son app la possibilité d’exposer ses données pour être partagées dans une autre app (pas seulement du texte !!),
  • Et enfin donner la possibilité à une app d’être destinataire de recevoir ses données partagées pour en faire quelque chose (réseau social par exemple).

Pour ce qui est de la partie C++, il sera possible de créer des modules entièrement en C++ et ensuite d’exposer celui-ci dans son app comme un module WinRT alors interrogeable directement en Javascript par exemple ; si vous voules voir cela marcher je vous conseille de regarder la Keynote de la BUILD :).

Enfin plus sur la partie design, un gros effort a été fait pour accélérer l’OS pour la partie tactile (le jour et la nuit comparé à Windows 7 avec le touch), et on a entendu que les performance ont été un des points les plus travaillés.

Un effort aussi fait sur de nombreux autres points en vrac :

l’Utilisation d’un ‘UEFI (remplaçant du BIOS) pour un boot de l’OS en moins d’une seconde,

Windows 8 Developer Preview est livré avec Visual Studio 11 (qui s’appuie sur .NET 4.5, et qui inclut le designer de Blend pour le XAML) ainsi que BLend 5 (qui prend en charge HTML5),

Roaming complet du profil utilisateur (settings des apps, wallpaper, lock screen pattern…),

Utilisation du stylet (un offert avec la tablette) pour pouvoir signer réellement sur le device (chose impossible sur les devices iOS),

Intégration de nombreux sensors (gyroscopique, mais aussi un capteur NFC),

Restent de noooooooomdreuses questions en suspens :

  • Pourra-t’on compiler un binaire C++ et le porter sur ARM ou y aura-t’il un principe similaire aux Universal Binaries de chez Apple ?
  • Le moteur de rendu XAML correspondant an Windows 8 semble être descendu d’un étage, directement dans le kernel ; ce runtime pourra-t’il être aussi utilisé pour les apps Silverlight qui tournent dans le browser par exemple ?
  • Existera-t’îl un Market Place interne pour les entreprises qui souhaitent publier seulement leurs applications sur les devices d’entreprise ?
  • Mais où ai-je mis mes chewing gums ??

Plus de nouvelles demain avec le début de sessions !!