Overblog
Suivre ce blog
Administration Créer mon blog
15 novembre 2014 6 15 /11 /novembre /2014 10:04

Sans aucune raison apparente, l'erreur "The debugger resource dll is out of date" est apparue lorsque je tentais de debugger mon application sous Visual Studio 2013. Le message d'erreur conseillait de faire un "Repair" de Visual Studio, ce que j'ai fait sans succès. Pire encore, toute tentative de désinstallation de Visual Studio 2013 m'était impossible avec une obscure erreur 0x80070643 à propos du "Core features".

Tout ce que j'ai pu trouver sur internet n'a pas résolu mon problème. J'ai donc improvisé et voici ce que j'ai fait pour résoudre cette erreur.

1- J'ai installé Revo Uninstaller et j'ai désinstallé VS 2013 en mode avancé en effaçant tout ce que le logiciel pouvait trouver.

2- J'ai effacé manuellement les dossiers C:\Program Files (x86)\Microsoft Visual Studio 12.0 et C:\Program Files (x86)\Microsoft Visual Studio 11.0

3- J'ai redémarré mon PC et refais une installation de Visual Studio 2013. L'installation c'est terminé avec plusieurs erreurs mineurs. A ce stade, VS 2013 ne fonctionnait toujours pas car même le fichier devenv.exe n'était pas présent dans le dossier !

4- J'ai fait un "Repair" de l'installation qui c'est terminé sans erreur et tout fonctionne normalement :)

Je cherche toujours à comprendre le "pourquoi" de cette erreur.

Published by Cyril - dans Visual Studio
commenter cet article
25 avril 2014 5 25 /04 /avril /2014 16:20

Si vous utilisez oData avec des QueryInterceptor vous avez peut-être rencontré l'erreur suivante en utilisant un .Expand dans votre requête Linq :

"Internal .NET Framework Data Provider error 1004, 0, Related Entities cannot be specified for Entity constructors that are not part of the Query Mapping View for an Entity Set."

Laissez moi deviner. Vous utilisez .Any dans votre QueryInterceptor n'est-ce pas ? Et bien il est temps de changer cette habitude en utilisant .FirstOrDefault

Au lieu de faire :

Return Function(o) o.Utilisateurs.Any(Function(e) e.fkUserId = pkUserKey)

Faites plutôt :

Return Function(o) o.Utilisateurs.FirstOrDefault((Function(e) e.fkUserId = pkUserKey)) IsNot Nothing

Et surtout, n'utilisez pas .Count qui sera gourmand en ressources.

Published by Cyril
commenter cet article
4 avril 2013 4 04 /04 /avril /2013 16:35

J'ai le plaisir de vous annoncer le lancement du logicel de gestion pour auto-entrepreneurs aeSphere Gestion.

Vous pouvez l'essayer gratuitement à cette adresse : http://www.aesphere.fr

Published by Cyril - dans Logiciels
commenter cet article
20 mars 2013 3 20 /03 /mars /2013 17:18
Beaucoup pensent qu'il n'est pas possible de passer un cookie d'identification à un WCF Service.
Les méthodes suivantes démontrent que c'est possible.

Méthode 1 :
 
Tout d'abord mettez le code suivant dans le constructeur de votre service :
  
Public Sub New()
Thread.CurrentPrincipal = HttpContext.Current.User
End Sub
 
 
 
Voici comment appeller la méthode de votre service :
 
Dim ws As New ServiceWeb.ServiceContractClient
  
Dim valid = Membership.ValidateUser("Jacques", "MonMotDePasse")
Dim identity = TryCast(Thread.CurrentPrincipal.Identity, ClientFormsIdentity)
  
Using ocs = New OperationContextScope(TryCast(ws.InnerChannel, IContextChannel))
  
Dim ch = identity.AuthenticationCookies.GetCookieHeader(ws.Endpoint.ListenUri)
Dim rmp As New HttpRequestMessageProperty()
rmp.Headers(HttpRequestHeader.Cookie) = ch
 
Dim col = ws.Endpoint.Binding.CreateBindingElements()
Dim transport = col.Find(Of HttpTransportBindingElement)()
transport.AllowCookies = True
ws.Endpoint.Binding = New CustomBinding(col)
 
OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, rmp)
 
ws.MaMethode(MesParametres)           
End Using



Méthode 2 :
Tapez une dizaine de lignes de codes à chaque fois que vous devez appeller une méthode de votre WCF service ce n'est pas très pratique. Voici donc comment automatiser l'ajout d'un cookie dans l'entête.
 
Tout d'abord il nous faut créer 2 classes CookieBehavior et CookieMessageInspector qui implémentent respectivement IEndPointBehavior et IClientMessageInspector.

Imports System.ServiceModel.Description
Imports System.ServiceModel.Dispatcher
Imports System.ServiceModel.Channels
Imports System.ServiceModel
Imports System.Threading
Imports System.Web.ClientServices
Imports System.Net

Public Class CookieBehavior
Implements IEndpointBehavior
Private cookie As String
Public Sub New(cookie As String)
Me.cookie = cookie
End Sub
Public Sub AddBindingParameters(serviceEndpoint As ServiceEndpoint, bindingParameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IEndpointBehavior.AddBindingParameters
End Sub
Public Sub ApplyClientBehavior(serviceEndpoint As ServiceEndpoint, behavior As System.ServiceModel.Dispatcher.ClientRuntime) Implements IEndpointBehavior.ApplyClientBehavior
behavior.MessageInspectors.Add(New CookieMessageInspector(cookie))
End Sub
Public Sub ApplyDispatchBehavior(serviceEndpoint As ServiceEndpoint, endpointDispatcher As System.ServiceModel.Dispatcher.EndpointDispatcher) Implements IEndpointBehavior.ApplyDispatchBehavior
End Sub
Public Sub Validate(serviceEndpoint As ServiceEndpoint) Implements IEndpointBehavior.Validate
End Sub
End Class

Public Class CookieMessageInspector
Implements IClientMessageInspector
Private cookie As String
Public Sub New(cookie As String)
Me.cookie = cookie
End Sub
Public Sub AfterReceiveReply(ByRef reply As System.ServiceModel.Channels.Message, correlationState As Object) Implements IClientMessageInspector.AfterReceiveReply
End Sub
Public Function BeforeSendRequest(ByRef request As System.ServiceModel.Channels.Message, channel As System.ServiceModel.IClientChannel) As Object Implements IClientMessageInspector.BeforeSendRequest
Dim httpRequestMessage As HttpRequestMessageProperty
Dim httpRequestMessageObject As Object = Nothing
If request.Properties.TryGetValue(HttpRequestMessageProperty.Name, httpRequestMessageObject) Then
httpRequestMessage = TryCast(httpRequestMessageObject, HttpRequestMessageProperty)
If String.IsNullOrEmpty(httpRequestMessage.Headers("Cookie")) Then
httpRequestMessage.Headers("Cookie") = Cookie
End If
Else
httpRequestMessage = New HttpRequestMessageProperty()
httpRequestMessage.Headers.Add("Cookie", Cookie)
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage)
End If
Return Nothing
End Function
End Class



Maintenant il suffit de taper 2 lignes pour créer votre WCF Service avec son Cookie d'authentification en entête.

Dim ws As New ServiceWeb.ServiceContractClient

ws.Endpoint.Behaviors.Add(New CookieBehavior(DirectCast(Thread.CurrentPrincipal.Identity, ClientFormsIdentity).AuthenticationCookies.GetCookieHeader(ws.Endpoint.ListenUri)))

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
Published by Cyril - dans WCF
commenter cet article
16 mars 2013 6 16 /03 /mars /2013 16:33

Il est important de protéger son code. Même si Dotfuscator CE n’a pas toutes les fonctionnalités nécessaires à une bonne obfuscation il permet néanmoins de rendre le code moins compréhensible.

Dotfuscator CE ne permet pas d’obfusquer le code à la volé et de le signer lorsque l’on utilise le bouton “Publish Wizard” de Visual Studio 2012 pour un projet ClickOnce.

Il est cependant possible de le faire en suivant les étapes suivantes (Configuration Release):

 

1- Faite un Rebuild de votre application

2- Copiez tous les .dll se trouvant dans le dossier /bin/Release dans le dossier /obj/Release

3- Ouvrez DotFuscator CE et obfusquez votre application (.exe) se trouvant dans le dossier /obj/Release

4- Remplacez le fichier de votre application se trouvant dans /obj/Release par celui généré par DotFuscator CE se trouvant généralement dans le dossier /Mes documents/DotFuscated

5- Dans les propriétés de votre projet, dans l’onglet “Publish”, cliquez sur “Publish Now

 

Le bouton “Publish Now” considére que le build de votre application est à jour et va donc créer le package de déploiement à partir de votre fichier obfusqué !

Published by Cyril - dans VB.NET
commenter cet article
3 octobre 2012 3 03 /10 /octobre /2012 18:36

Si vous avez des ralentissements ou des “écrans bleus de la mort” (BSOD) avec un message de type DRIVER_IRQL_NOT_LESS_OR_EQUAL sur le fichier iaStorA.sys c’est que vous êtes peut-être victime du Link Power Management (LPM) de Intel Rapid Storage Technology (RST).

 

Cet article de Guizmo donne une bonne solution à ce problème en modifiant la base de registre de Windows. Cette solution permet de désactiver purement et simplement le LPM.

 

Attention ! Avant de changer votre base de registre je vous conseille de créer un point de restauration (consultez l’aide de Windows pour savoir comment faire).

Allez dans la base de registre de Windows (regedit.exe) et ajoutez une clé pour chaque port SATA de votre carte mère dans le chemin suivant :

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\iaStor\Parameters\Port0

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\iaStor\Parameters\Port1

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\iaStor\Parameters\Port2

etc.

 

Ensuite dans chacune des clé créez les valeurs DWORD suivantes :

 

LPM
LPMDSTATE
DIPM

 

Chacune de ces valeurs doivent être égales à zéro (ce qui est le cas par défaut). Enfin, redémarrez votre ordinateur.

 

J’ai moi même eu des problèmes de freeze et de BSOD sur un Windows 7 avec 2 disques durs en RAID0 et cette solution l’a résolu.

Published by Cyril - dans Windows 7
commenter cet article
9 août 2012 4 09 /08 /août /2012 15:01

Commencez par télécharger le fichier correspondant à votre machine à l’adresse suivante :

http://www.microsoft.com/fr-fr/download/details.aspx?id=7593

 

Ensuite créez un fichier Installer.bat dans le même dossier que votre fichier d’installation. Mettez la ligne de commande suivante dans ce fichier (attention cet exemple utilise le fichier 64 bits. Modifier le nom du fichier pour qu’il corresponde au fichier que vous avez téléchargé) :

SQLManagementStudio_x64_FRA.exe /qs /FEATURES= SSMS /ACTION=Install

 

Lancez le fichier Installer.bat pour installer automatiquement SQL Server 2008 Management Studio Express ainsi que d’autres outils pour importer, exporter et manipuler les données.

Published by Cyril - dans Logiciels
commenter cet article
23 juillet 2012 1 23 /07 /juillet /2012 07:41

Pour commencer, mettez votre document dans les Resources de votre application formaté de cette façon :

 

 <FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <Paragraph> Mon texte. </Paragraph> </FlowDocument> 

 

Vous devez importer les espaces de nom suivant :

 

 Imports System.IO 
 Imports System.Xml 
 Imports System.Xaml 
 
 
 
Ensuite il suffit d’utiliser un StringReader et un XmlReader pour récupérer le FlowDocument.
 
 Dim templateString As String = My.Resources.MonFlowDocument 
 Dim stringReader As New StringReader(templateString) 
 Dim xmlReader1 As XmlReader = XmlReader.Create(stringReader) 
 Dim template As FlowDocument = DirectCast(XamlServices.Load(xmlReader1), FlowDocument) 
 Me.RichTextBoxFlowDoc.Document = template 
Published by Cyril - dans WPF
commenter cet article
5 mars 2012 1 05 /03 /mars /2012 11:38

Voici en quelques étapes comment procéder :

 

- Si ce n’est pas déjà fait, téléchargez et installez Microsoft Outlook Connector

- Au démarrage d’Outlook il vous sera demandé l’identifiant et le mot de passe de votre compte Hotmail ou Live.

- Cliquez ensuite sur “Contacts” dans le volet de gauche. Vous remarquerez qu’il y a maintenant “Contacts Outlook” et “Contacts monadresse@hotmail.fr” (ou autre en fonction de votre adresse).

- Cliquez sur “Contacts Outlook” et sélectionnez les contacts que vous voulez importer en maintenant appuyé la touche Ctrl de votre clavier et en cliquant sur les contacts.

- Maintenez appuyé le bouton gauche de la souris sur l’un des contacts sélectionnés et faites les glisser sur “Contacts monadresse@hotmail.fr”.

- Si il y a des doublons Outlook vous demandera si il doit les fusionner.

 

N’oubliez pas d’ajouter votre compte Hotmail sur votre Windows Phone en allant dans “Paramètres”, “email+compte”, “Windows Live”.

Vos contacts seront progressivement transférés de votre compte Hotmail vers votre téléphone.

 

 

Published by Cyril - dans Logiciels
commenter cet article
25 janvier 2012 3 25 /01 /janvier /2012 19:31

Il est possible de planifier des sauvegardes de base de données SQL Server sans utiliser SQL Agent grâce à l’utilitaire sqlcmd et au planificateur de tâche de Windows.

Ceci est particulièrement utile pour les utilisateurs de SQL Server Express qui ne bénéficient pas de SQL Agent.

 

La première étape consiste à créer un fichier C:\Backup.sql qui contiendra le code T-SQL nécessaire à la sauvegarde de vos données :

 

USE master;
BACKUP DATABASE [maDb1] TO DISK='C:\MonDossier\maDb1.bak';
BACKUP DATABASE [maDb2] TO DISK='C:\MonDossier\maDb2.bak';
BACKUP DATABASE [maDb3] TO DISK='C:\MonDossier\maDb3.bak';
BACKUP DATABASE [maDb4] TO DISK='C:\MonDossier\maDb4.bak';

 

Ensuite il suffit de créer un fichier C:\Backup.bat dans lequel nous allons exécuter la commande sqlcmd :

 

sqlcmd –E –S NomDeMonServeur –i C:\Backup.sql

 

 

Enfin il suffit d’utiliser le planificateur de tâche de Windows pour lancer notre fichier Backup.bat au jour et à l’heure souhaitée.

 

Pour plus d’informations sur les paramètres de sqlcmd reportez-vous à la documentation de Microsoft : http://msdn.microsoft.com/fr-fr/library/ms180944.aspx

Published by Cyril - dans Sécurité
commenter cet article