Migration d'application MVC 3 en MVC 4

Avec Visual Studio 2010 SP1 Rel, j'ai installé MVC 3 puis MVC 4 mais Visual Studio ne me propose pas de créer des application MVC 3. Qu'à cela ne tienne, je me propose d'étudier la migration d'application MVC 3 vers MVC 4.

Je viens de télécharger une application du CodePlex :
http://advsampleapp.codeplex.com/
Sample app for Adventureworks database

Et il se trouve qu'à la page suivante :
http://www.mztools.com/Articles/2008/MZ2008017.aspx
On me dit que c'est une application MVC 3.

Lorsque je charge cette solution dans mon Visual Studio, j'obtiens l'erreur suivante :

AdventureWorks.Web.csproj is not supported by this installation
C'est assez curieux car je pensais que VS me proposerait de traduire cette application de MVC 3 vers MVC 4 mais il n'en est rien. Puis-je le faire à la main ?

Je regarde la ligne d'une application MVC 4 standard :
<ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

Et je copie cette ligne directement dans le fichier :
\\advsampleapp-15464\Adventureworks\Adventureworks.Web\Adventureworks.Web.csproj

Que se passe t-il ?

Adventureworks.Web.csproj - Reload Project
J'obtiens un résultat encourageant :

Adventureworks.Web.csproj - Install de ASP.NET Web pages with Razor syntax 1.0
Le Web Platform Installer me propose d'installer Razor 1.0 ... Ce que je ne fais pas. Je reload simplement mon projet mais au moment de builder l'application, j'obtiens une "Erreur non spécifiée". Par expérience je me doute qu'il s'agit des "Services Références". Au moment de faire un Update des Services Référence :



J'obtiens l'erreur suivante :

Service Reference is invalid
Mais une fois mon service reference "PurchasingService" reconstruit l'application ne compile toujours pas. Je décide d'installer ce qui était préconiser le :

Web Platform Installer : Visual Studio 2010 SP1 Tool pour ASP.NET WebPages 1.0
En cliquant sur "Installer" :

Version de NuGet installés incompatible avec ASP.NET MVC 3 Tools Update
Consultez le lien :

En consultant ce lien, on tombe sur un Getting Started with MVC. On y verra également un getting started with MVC 5. Ce n'est pas très cool !

Conclusion MVC 3 vers MVC 4

La migration d'application MVC 3 en MVC 4 ce n'est pas gagné !

Pour aller plus loin :
Donc la version de Razor utilisée pour MVC 3 est 1.0 tandis que MVC 4 utilise Razor 2.0

Références du projet AdventureWorks Sample
DLLs qui utilisent ASP.NET Web Pages\v2.0 :
System.Web.Helpers.dll
System.Web.WebPages.dll

Et si on les fait pointer ces références vers la version v1.0 que se passe t-il ?

L'application Build mais à l'exécution en mode DEBUG :

Windows authentication is not enabled
Mais cela c'est du classique, il s'agit de la gestion des droits d'accès au répertoire virtuel, aux BD ASPNETDB et AdventureWorks, de chaines de connexion dans le Web.config ...

Outil de traduction automatique MVC3 vers MVC4

Et sinon vous avez un outils NuGet qui traduit automatiquement une solution MVC3 en MVC4 :

Auto Upgrade MVC 3 To MVC 4 1.0.1

Mais il était important de découvrir ce que cet outil doit faire pour traduire une solution.



ASP.NET MVC 3 - MVC 4

Dans un post précédent ASP.NET MVC, j'avais regarder de loin l'installation du framework asp.net mvc, le développement d'application avec razor ou webform. Je vais faire un refocusing sur le développement ASP.NET MVC et je m'arrêterai à MVC 3 ou MVC 4 ou les deux, pour simplifier ;)

ASP.NET MVC 3 Installation

Une fois Visual Studio installé et une version de SQL Server, l'installation du framework MVC 3 commence ici : ASP.NET MVC 3
ASP.NET MVC 3 Tools Update - Installation en Anglais
Curieusement si vous choisissez la langue Française le titre change pour l'appellation : ASP.NET MVC 3 RTM Tools Update, et je n'ai pas trop d'explications quant aux "RTM" ...

Encore une chose peu orthodoxe, si vous cliquez sur le bouton Download vous obtenez un choix :

ASP.NET MV 3 Tools Update Choices
 Ce qui donne en français :

ASP.NET MVC 3 Tools Update Choices in French
C'est un peu déroutant, on télécharge donc les trois fichier puis on va cliquer sur AspNetMVC3ToolsUpdateSetup.exe en premier, puis sur AspNetMVC3ToolsUpdateVS11Setup.exe.

Microsoft ASP.NET MVC 3 - 1
Poursuite de l'installation :

Microsoft ASP.NET MVC 3 - 2
Cette installation crée le répertoire : C:\Program Files\Microsoft ASP.NET et l’arborescence de fichiers suivante :

ASP.NET MVC 3 - Fichiers d'installation
C'est encore bien déroutant non ? On parlais de MVC 3 et l'on se retrouve avec un répertoire nommé MVC 4 pourtant MVC 4 existe bien séparément sous l'appellation ASP.NET MVC 4 pour Visual Studio 2010 SP1 et Visual Web Developer 2010 SP1.

En comparant les System Requirements des deux versions :

MVC 3

Supported Operating System
Windows 7, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Vista, Windows XP
.NET 4, ASP.NET 4, Visual Studio 2010 or Visual Web Developer 2010 are required to use certain parts of this feature.

MVC 4

Système d'exploitation pris en charge
Windows 7; Windows Server 2003 R2 (32-Bit x86); Windows Server 2003 R2 x64 editions; Windows Server 2003 Service Pack 2; Windows Server 2008; Windows Server 2008 R2; Windows Vista Service Pack 2; Windows XP Service Pack 3
PowerShell 2.0, .NET 4, ASP.NET 4 et Visual Studio 2010 SP1 ou Visual Web Developer 2010 SP1 sont requis pour pouvoir utiliser cette fonctionnalité.

On dirait que MVC 4 est une amélioration de MVC 3 pour VS 2010 SP1 ... Et ce n'est pas logique comme d'hab avec microsoft on pourrait nommer MVC 4 : MVC 3 SP1 ou SP3 ...

ASP.NET MVC 4 Installation

Une fois MVC 3 installé et bien continuons Ici.

ASP.NET MVC 4 Download
En suite après avoir pris soin de "débloquer" AspNetMVC4Setup.exe :

ASP.NET MVC 4 Install
ASP.NET MVC 4 Install - Successful





Windows 8.1 et Virtual PC sous Windows XP

Avec l'arrivée de Windows 8 et de Windows 8.1 que devient Virtual PC ? Est-il possible d'installer une machine virtuelle avec Windows 8.1 ? Je ne trouve pas d'informations réellement probantes sur ce sujet.

Quelques lectures Ici ou  mais on y parle que d'Oracle Virtual Box.

Alors on va faire l'essai. J'ai installé Virtual PC :

Virtual PC for Windows XP SP3
Je télécharge une image ISO de Windows 8.1 :

Téléchargement de Windows 8.1 Entreprise Preview
Vous devez posséder un compte Windows Live afin de répondre à quelques questions avant de pouvoir télécharger le fichier : 9431.0.WINMAIN_BLUEMP.130615-1214_X86FRE_ENTERPRISE_FR-FR_VL-IMP_CENA_X86FREV_FR-FR_DV5.ISO

Grâce à Virtual PC, je créé un nouvel ordinateur virtuel et je vais lui faire avaler cette image iso comme disque de boot. Je démarre ce nouvel ordinateur virtuel :

Virtual PC Ordinateur Virtuel pour Windows 8.1
Dans le menu "CD" je fais capturer une image ISO et je tape sur "Return".
Ce nouvel ordinateur virtuel est capable de booter sur l'image iso j'obtiens un joli poisson qui fait des bulles :

Windows 8.1, le joli poisson qui fait des bulles dans Virtual PC
Mais au bout de quelques secondes :

Virtual PC : Une erreur interne s'est produite sur l'ordinateur virtuel. L'ordinateur virtuel va se réinitialiser

J'ai beau cliquer sur le bouton "Réinitialiser" rien n'y fait la même erreur se produit à chaque fois. J'aurais quand même eu le plaisir de voir le "joli poisson qui fait des bulles".

Conclusion

Virtual PC 2007 installé dans sur une machine hôte Windows XP ne peut pas installer d'ordinateur virtuel avec une image iso de Windows 8.1. Entreprise Preview. Cette image iso ne semble pas faite pour lui, je vais essayer avec Oracle Virtual Box mais la même erreur se produit.

Error Code : 0x0000005D
Pour résoudre ce problème, suivez les directives du fabricant pour permettre à NX ("bit no execute"), ou le XD équivalent ("Execute Disabled"), la fonction dans les réglages du BIOS.

La suite des explications Ici et des explications détaillées .
Error Code: 0x0000005D
Parameters:
0x030F0204
0x756E6547
0x49656E69
0x6C65746E

Mon processeur est incompatible avec Windows 8 !

Vous souhaitez en savoir plus sur les caractéristiques de votre CPU et le mode de compatibilité avec Windows 8, c'est Ici.

Have fun! It's only software.

Ajout en 2020

C'est ça qui est incroyable avec Internet c'est que l'on peut relire d'ancienne chose et découvrir à quel point elles sont encore valables aujourd'hui les incompatibilités entre les différentes version de Windows c'est une chose mais aujourd'hui c'est Oracle Virtual Machine qui me pose un gros problème !

En effet je suis avec une configuration stable depuis quelques années je n'aime pas me jeter sur le dernier OS qui sort sauf pour essayer avant d'y passer trouver les astuces qui permettent d'aller plus vite d'être plus à l'aise de mieux bosser.

Mais là je souhaite relancer une machine virtuelle qui doit avoir trois quatre ans et qui tournait très bien avec Oracle Virtual Machine mais au moment de l'exécuter :

Beug !

C'est scandaleux, vous imaginez mon désarrois. J'utilise exprès Oracle Virtual Machine pour m'affranchir des problèmes de compatibilité et OVM est  devenu incompatible avec mes machines, je suis ... j'ai pas de mot je ne pensais pas qu'ils oseraient.

C'est à ça qu'on reconnait les Cons, ils osent tout !

WCF Services - WCF Test Client - Problème

Je cherche à créer une application console qui hébergerait un WCF Service, parce que pour le développement il serait plus facile d'héberger mon service ainsi que de devoir à l'installer ailleurs.

Contexte du problème 

Je pars de l'exemple de Jason De Olivera :
http://www.jasondeoliveira.com/2009/07/tutorial-adonet-data-services-part-3.html
qui me semble parfait pour ce que je souhaite faire : une WCF Application Service et deux Consoles une pour le Client et une pour le Host :

WCF Service hosté dans une application console - Projet Visual Studio 2010
Je lance l'exécution du client :

WCF Service hosté dans un application console - Exécution
J'exécute la commande "EF" pour lire des données à partir du Modèle Entity Framework :

WCF Service lecture des données à partir du Modèle Entity d'Entity Framework
Mon service est en cours d'exécution, grâce aux ligne de code c# suivantes :
\030 - Tutorial ADO.NET Data Services\ADODataServiceLearning_Part4\Host\Program.cs
const string sURI = "http://localhost:37052/ExampleDataService.svc";
host = new DataServiceHost(typeof(ExampleDataService), new Uri[] { baseAddress });
host.Open();

Je pense légitimement que je vais pouvoir utiliser WCF Test Service pour tester le service, je lance donc un "Add Service..." :

Utilisation de WCF Test Service pour tester mon service hosté dans la console
Mais j'obtiens l'erreur suivante :

Erreur à la découverte de mon WCF Service hosté
En gros elle me dit :
Error: Cannot obtain Metadata from http://localhost:37052/ExampleDataService.svc
If this is a Windows (R) Communication Foundation service to which you have access, 
please check that you have enabled metadata publishing at the specified address.  
For help enabling metadata publishing, please refer to the MSDN documentation at 
http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error    URI: http://localhost:37052/ExampleDataService.svc    
Metadata contains a reference that cannot be resolved: 'http://localhost:37052/ExampleDataService.svc'.    
The remote server returned an unexpected response: (405) Method Not Allowed.    
The remote server returned an error: (405) Method Not Allowed.
HTTP GET Error    URI: http://localhost:37052/ExampleDataService.svc    
The document at the url http://localhost:37052/ExampleDataService.svc/ 
was not recognized as a known document type.
The error message from each known type may help you fix the problem:
- Report from 'XML Schema' is 'The root element of a W3C XML Schema should be <schema> 
  and its namespace should be 'http://www.w3.org/2001/XMLSchema'.'.
- Report from 'DISCO Document' is 'Discovery document at the URL 
  http://localhost:37052/ExampleDataService.svc/ could not be found.'.  
- The document format is not recognized.
- Report from 'WSDL Document' is 'There is an error in XML document (2, 2).'.  
- <service xmlns='http://www.w3.org/2007/app'> was not expected.

Solution au problème de WCF Test Client

Il faut utiliser l'outil Service Configuration Editor pour configurer le WCF Service : ExampleDataService.svc et créer le contenu des fichiers .config manquant dans la solution. Cette configuration des WCF Services doit être effectuée dans le ficher App.config de la Console qui hoste le service.

WCF Services - AspNetCompatibilityRequirements - Problème

Un petit souci que j'aimerais soulever. Il y a de nombreuse manipulations à effectuer pour créer véritablement une architecture de logiciel correctement fondée sur les WCF Services.

Contexte du problème 

J'ai une application qui utilise le modèle suivant :
J'ai créé un WCF Service :
  DataService.svc

Que je dérive d'une interface :

IDataService.cs

    [ServiceContract]
    public interface IDataService
    {
        [OperationContract]
        Data_Customer GetCustomer(int ID);
    }
    [DataContract]
    public class Data_Customer
    {
        [DataMember]
        public int CustomerID { get; set; }
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
    }

Mon application fonctionne et puis je décide d'y ajouter un WCF Data Service :

WPF Using WCF Services
Mais à l'exécution de mon application, j'obtiens l'erreur suivante au moment d'appeler le service  :
WCF Service Error while addind WCF Data Service in solution
Voilà que maintenant, je suis amené à rajouter les lignes suivantes dans mon service pour qu'il fonctionne à nouveau :

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    using System.ServiceModel.Activation;
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class Service1 : IService1
    {

C'est un peu déroutant ...

Si l'on essaye de mettre à jour le Service Référence :

WCF Services - Mise à jour du Service Référence
On tombe sur une erreur d'un autre monde :

WCF Service Reference Updated
To Be Continued

C# .NET Frameworks - DevForce for Silverlight

DevForce est un framework qui permet de construire et d'exploiter des données dans une application riche d'entreprise. DevForce fournit les outils, les techniques et les bibliothèques dont vous avez besoin pour créer des applications business puissantes et rapides.

http://www.ideablade.com/solutions/solutions.aspx

DevForce Processus d'installation

Vous devez vous enregistrer pour obtenir une clef produit. 


Je vais installer la version 2010.
DevForce-2010.setup.6.1.14.exe

Je clique sur l'exécutable :

DevForce 2010 Install
Je rentre ma clef produit, elle m'a été fournit par email lors de mon enregistrement et je modifie la lettre de disque car j'installe dans E:\ :
DevForce 2010 Install et Clef Produit
Erreur pendant le processus d'installation de DevForce 2010 :
DevForce 2010 - Erreur pendant l'installation

DevForce 2010 - Debugger l'erreur d'installation
Je décide donc de désinstaller le produit pour tenter de le réinstaller dans C:\ par curiosité :

Erreur pendant l'installation de DevForce 2010 désinstallation du produit
Erreur pendant l'installation de DevForce 2010 - désinstallation du produit
Mais la même erreur se produit !

Tan pis, je continue le processus d'installation, l'erreur est curieuse et l'installation créé un répertoire :
C:\Program Files\DevForce 2010\TemplateBackups\ProjectTemplates\DevForce%202010

On notera le caractère "%" dans le nom de ce répertoire ...

A la fin de l'install mon navigateur s'ouvre à la page :
http://www.ideablade.com/getting-started/getting-started-universal.aspx

La lecture du "DevForce Installation Guide.pdf", fournit avec l'install, permettra peut-être de résoudre quelques soucis d'installation.

DevForce Getting Started

Ca commence ici

Started in Silverlight

DevForce in Silverlight

Et maintenant tentons de créer une application Silverligt basée sur DevForce.


Je lance Visual Studio 2010 et je fais File->New->Project :

DevForce in Silverlight création d'une Application Business
Remarque : j'ai ici bien plus de templates que dans la documentation de DevForce.

Il faut avoir installé le Silverlight SDK 4.0 ...

Et la création d'une application DevForce Silverlight Business vous demande de choisir entre Silverlight 4.0 et Silverlight 5.0 :

DevForce Silverlight target version

DevForce Entity Data Model

Au moment d'attacher la BD NorthwindIB dans Visual Studio une erreur :

DevForce Erreur de la BD NorthwindIB
La version de NorthwindIB utilisée par DevForce est 661 tandis que SQL Server 2008 Express Edition n'en est qu'à la version 655.

Un petit retour dans le DevForce Installation Guide pour constater que DevForce fournit une autre BD pour SQL Server 2005 et 2008, on note au passage un petit souci, le lien vers la BD est au choix :

http://www.ideablade.com/friends/NorthwindIB.zip
ou
ftp://www.ideablade.com/Code-Samples-SQL-Databases/NorthwindIB-for-SQL2005-2008.zip

Tout ceci n'est pas très sérieux !

Mais une fois la bonne version de Base de Données installée, on peut créer l'Entity Data Model :

DevForce Silverlight Application - Entity Data Model
Et l'on obtient bien le message :

DevForce création de l'Entity Data Model - Message de sécurité
Et l'ADO.NET Entity Data Model est créé correctement :

ADO.NET Entity Data Model for DevForce Data Base NorthwindIB
En complétant mon code en créant le ViewModel de la Main Page, j'obtiens le résultat d'exécution suivant :

DevForce Silverlight Business Application

Conclusion

DevForce dans cet exemple est utilisé comme surcouche de l'Entity Framework et simplifie l'écriture de l'application Silverlight et son accès aux données. Mais je ne vois pas encore comment DevForce peut m'aider à écrire des applications multiplate-forme ce qui est pourtant le but recherché.

Requirements :
DevForce 2010
SQL Server 2008 Express Edition
Visual Studio 2010
EntityFramework

Download  Source Code

Frameworks C#.NET Multiplateformes

Après ces différentes études des plateformes de développement C# et des différents frameworks correspondants, on se doute que certaines équipes de développement souhaiteraient capitaliser sur un framework qui facilite le développement et capitalise un socle commun pour décliner une série d'applications permettant le développement multiplateforme : postes, tablettes, phone.

Voici donc certains produits sur le net répondants à cette problématique ...

DevForce

http://www.ideablade.com/products/devforce-features.aspx

http://drc.ideablade.com/devforce-2012/bin/Documentation/

Vous devez enregistrer pour obtenir une clef produit.
Il est possible de travailler avec Visual Studio 2010 mais la dernière version est faite pour VS 2012.
En suite, on trouve trois éditions du produit : Universal, Silverlight et WinClient.
Mais aussi le produit Cocktail qui permet de développer des applications Silverlight et WPF et prend en charge les modèles de développement comme MVVM et les design patterns.

Je vais installer DevForce 2010 Universal v6.1.14

http://www.ideablade.com/download-portal/DevForce%20Installation%20Guide.pdf
Installation Guide

Dissection des nouveautés de Silverlight 5

Si vous êtes utilisateur de Silverlight 4.0 et que vous manquez d'arguments pour passer à Silverlight 5.0 alors cet article de David Catuhe est pour vous :

http://msdn.microsoft.com/fr-fr/silverlight/hh184212
Énormément d'améliorations ont été apportées à cette dernière version de Silverlight. On doit remarquer que ces améliorations sont souvent issues de WPF. Ne devait-il pas y avoir convergence entre WPF et Silverlight ? Mais c'est une autre histoire ...

Silverlight et Log4Net

La thématique de l'outil de traces est ancienne comme le monde des développeurs. Il faut toujours pouvoir tracer son programme et retirer ces traces au moment du déploiement.

Alors parmi tous les outils de traces mon regard se tourne vers Log4Net et puis-je l'utiliser avec Silverlight ?

Un bon tutoriel mais en anglais ici.

La page la plus intéressante sur ce sujet pour moi, se trouve ici. On y apprend que l'on ne pourra pas utiliser directement Log4Net avec Silverlight car aucune des builds n'est réalisée avec ce framework : Log4Net Supported Frameworks.

Qu'il est inutile de tenter de compiler les sources de Log4Net avec Silverlight, étant donné les restrictions de ce dernier, il n'est pas possible d'avoir accès au système de fichiers côté client et donc de créer un fichier de logs.

On y donne également le début d'une solution : Utiliser l'application ASP.NET qui host le .xap de Silverlight pour faire une référence à la DLL log4net. Vous n'avez plus qu'à développer un service web qui permettra à Silverlight d'utiliser Log4Net.

Voici donc le projet :
Une Business application for Silverlight 5.0
Une Asp.net application qui host le .xap et qui aura une référence sur la dll log4net.
Un WCF Service dans l'application asp.net que l'on va rendre utilisable depuis Silverlight.
Le tout pour faire des Logs dans un fichier texte.

Silverlight Business Application for Log4Net

Je créé une application Business pour Silverlight que je nomme BusinessApplicationLog4Net :

Silverlight Business Application BusinessApplicationLog4Net
Je créé une référence à la DLL log4Net que j'ai installée :


Référence à log4net dans mon projet BusinessApplicationLog4Net

ASP.NET Business Application and Log4Net afficher des traces

Installation d'un bouton et d'un TextBox dans l'application asp.net afin de faire des logs.

Dans la Silverlight Business Application, derrière la page BusinessApplicationLog4NetTestPage.aspx il n'y a pas de code behind, je souhaite pourtant faire des logs à partir d'un bouton de cette page. Je une nouevelle page BusinessApplicationLog4NetTestPage.aspx cette fois avec son code behing et je copie le cope nécessaire l'embarquement du .xap. Je peux ainsi ajouter mon bouton et déclencher du code derrière :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Collections;

// Here is the once-per-application setup information
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace BusinessApplicationLog4Net.Web
{
    public partial class BusinessApplicationLog4NetTestPage : System.Web.UI.Page
    {
        // Should be declared for each class
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        protected void Page_Load(object sender, EventArgs e)
        {
            log.Debug("Page Loaded");
        }

        private static int nbLogs = 0;

        protected void ButtonMakeLog_Click(object sender, EventArgs e)
        {
            log.Debug("ButtonMakeLog_Click");
            TextBoxLog.Text = "nbLog " + nbLogs.ToString();
            log.Debug(TextBoxLog.Text);
            nbLogs++;
        }
    }
}

Pour faire des logs il me faut encore trois choses :
le déclenchement d'une fonction d'assembly XmlConfigurator
la déclaration d'une variable log
l'appel à la fonction log que je fais depuis la page Page_Load

ASP.NET and Log4Net web.config

Remarque importante :
Je me suis égaré en lisant le tutoriel dans la création d'un fichier de configuration pour Log4Net à part : Log4Net.config mais cela ne fonctionnait pas.
Il faut avoir à l'esprit les limitations des applications asp.net qui sont sécurisées et mon application ne trouvait jamais le fichier Log4Net.config je pris donc le parti de configurer mon Log4Net dans le fichier Web.config

Pour les logs, je créé un répertoire Log auxquels je donne accès à "Tout le monde".
Et je lance mon application :

Silverlight Business Application for Log4Net
Et maintenant pour afficher mes logs, je tape l'url suivante :

http://localhost:52878/Log/log.txt

Et les logs s'affichent dans mon navigateur :

ASP.NET Business Application afficher les logs

WCF Service for Service references in RIA application

Pour que mon application Silverlight puisse elle aussi faire des logs avec Log4Net, je créé un WCF Service hosté par mon application ASP.NET que je nomme ServiceLogger :

WCF Service Logger
Je ne fais pas le détail du code, vous pourrez télécharger ce code source en bas de cet article.

Pour utiliser ce service dans mon application Siverlight il faut lui ajouter une Service Refrence :
Silverlight Application Add Service Reference
En suite je clique sur "Discover" pour découvrir les Services installés au sein de ma solution :


Pour découvrir les fonctionnalités de mon service, je clique sur ServiceLogger.svc et là je tombe sur l'erreur :

WCF Service Hosted by ASP.NET application - Error while attempting to find services
La solution détaillée de cette erreur se trouve Ici.

Une fois les lignes :

using System.ServiceModel.Activation;

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Ajoutées dans mon services, et :
Remarque importante : La création de WCF Services comme bien d'autres objets entraîne du code généré afin de le mettre à jour ne pas hésiter à "Cleaner" la solution.

J'obtiens enfin mon ServiceReference que je nomme "ServiceLogger" :

Silverlight WCF Ria Services 

Silverlight make logs using Service References

Je rajoute un bouton et un textbox dans la page home de mon application Silverlight. 
Le code de mon bouton est le suivant :

        private int nbLogs = 0;

        private void buttonMakeLog_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            var log = new ServiceLogger.ServiceLoggerClient();
            log.LogMessageAsync("Click on button will produced log on server" + nbLogs.ToString());

            textBox.Text = "log " + nbLogs.ToString();
            nbLogs++;
        }

Je l'exécute et je joue un peu avec :

Silverlight utilise un Service Reference et Log4Net pour afficher des traces
Et j'affiche mes traces :

Grâce à Log4Net mon application Silverlight fait des traces dans ASP.NET

Conclusion

Oui c'est délicat de mettre en oeuvre l'ensemble de ces technologies surtout avec Silverlight et ASP.NET. Au début du projet, on ne peut pas être certain d'aboutir puis on trouve des astuces des contournements. En développant il faut bien garder à l'esprit les différentes limitations des applications Silverlight et ASP.NET en général c'est cela qui permet de trouver une solution.

Download Source Code

Requirements :
Visual Studio 2010
Silverlight 5.0
Log4Net

Download Source Code