IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Besoin d'aide C# MSMQ


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Par défaut Besoin d'aide C# MSMQ
    Bonjour,

    J'ai développé une application WEB en ASP.NET grace au C# en utilisant Visual Studio 2005! J'ai crée une Base de données (D) qui permet de rafraichir les données de ma page WEB toutes les "N" minutes!
    Je vais chercher les données dans d'autres bases SQL pour alimenter ma Base (D).

    J'ai utilisé MSMQ pour gérer l'alimentation de ma Base (D), j'ai créé des fichiers XML que j'envoi dans des files d'attentes (cette partie fonctionne bien), en revanche j'ai un problème pour envoyer les données de ma file d'attente a ma Base (D)!
    J'ai un message d'erreur qui me dit: "invalidoperationexception"
    Je n'arrive pas à resoudre ce problème, quand j'utilise la fonction debug de Visual studio je vois qu'il ne fait pas le insert dans ma table, il passe directement au catch!


    Voici le code de ma page qui gere la creation des files d'attentes, l'envoi des données des fichiers XML dans ma file d'attente et l'envoi des données de ma file d'attente dans ma base (D):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.Messaging;
    using System.Data.ProviderBase;
    using NP6.DAL;
    using System.Data.SqlClient;
    using System.IO;
     
    namespace waPutMSMQ
    {
        public partial class Form1:Form
        {
     
     
            public Form1()
            {
                InitializeComponent();
            } 
             private void button1_Click(object sender, EventArgs e)
                    {
     
                        //Creation XML
     
                        XmlDocument trafic = new XmlDocument();
                     trafic.LoadXml("<visites><visite><adresse_ip>62.39.140.121</adresse_ip><date>30/12/2006</date><heure>12:15:00</heure></visite><visite><adresse_ip>62.39.140.336</adresse_ip><date>30/11/2006</date><heure>15:15:00</heure></visite></visites>");
     
                        //ENVOI XML -> MSMQ
     
                        MessageQueueTransaction oTrans;
                        MessageQueue oMSMQueue;
     
     oMSMQueue = new System.Messaging.MessageQueue(@"FormatName:DIRECT=OS:SC1-compta230XP\private$\test");
     
                        oTrans = new MessageQueueTransaction();
                        oTrans.Begin();
     
                        oMSMQueue.Send(trafic, "Trafic_" + DateTime.Now.ToString("yyyy.MM.dd_HH.mm.ss.ff"), oTrans);
     
                        oTrans.Commit();
                        oMSMQueue.Close();
                        oMSMQueue.Dispose();
     
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
     
     
                        //MSMQ -> traitement
                        MessageQueueTransaction oTransaction;
                        MessageQueue oMsgQueu;
     
                        //Récupération du message
     
                        oTransaction = new MessageQueueTransaction();
                        oMsgQueu = new MessageQueue(@".\private$\test");
                        System.Messaging.Message oMessage = null;
     
                        try
                        {
                            oTransaction.Begin();
                            oMessage = oMsgQueu.Receive(oTransaction);
     
                            Type[] targetTypes = new Type[1];
     
                            targetTypes[0] = typeof(string);
     
                            oMessage.Formatter = new XmlMessageFormatter(targetTypes); //XmlMessageFormatter:Sérialise l'objet en Xml
     
                            XmlDocument oDOM = new XmlDocument();
                            oDOM.PreserveWhitespace = true;
                            oDOM.LoadXml((string)oMessage.Body); //On utilise la propriété Body pour récupérer l'objet encapsulé
     
                            // Chaîne de connexion
                            string connectString = "data source=SC1-DEVECOM;initial catalog=TempsReel;uid=callens;pwd=cultura;";
                            SqlConnection connection = new SqlConnection(connectString);
                            connection.Open();
     
                            XmlNodeList oServeurs = oDOM.SelectNodes("visites/visite");
                            foreach (XmlNode oNode in oServeurs)
                            {
                                SqlCommand command = new SqlCommand("INSERT INTO Visite(Date_visite,Heure_visite) values (" + oNode.SelectSingleNode("date").LastChild.Value + "," + oNode.SelectSingleNode("heure").LastChild.Value + ")", connection);
                                SqlDataReader reader = command.ExecuteReader();
                            }
     
                            connection.Close();
                        }
                        catch (XmlException Exml)
                        {
                            oTransaction.Abort();
                        }
                        catch (Exception ex)
                        {
       oTransaction.Abort(); //Pour sortir
                        }
                    }
                }
            }
    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Dans Visual Studio, place un point d'arrêt puis execute ton code en mode Pas à Pas pour voir là où cela provoque l'exception


    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Par défaut Besoin d'aide pour resoudre mon probleme
    Citation Envoyé par Morpheus
    Dans Visual Studio, place un point d'arrêt puis execute ton code en mode Pas à Pas pour voir là où cela provoque l'exception
    A+
    Merci d'avoir repondu a mon post!

    J'ai deja fait un point d'arret avec Visual Studio, mon code en mode Pas a Pas s'execute bien jusqu'au oDOM.LoadXml(oMessage.Body.ToString());

    Le reste du code n'est pas exécuté (la chaine de connexion + insert into...), il passe directement a l'exception

    catch (Exception ex)
    {
    oTransaction.Abort();
    }
    Le message d'erreur qui est affiché c'est:

    InvalidOperationException:
    "Cannot deserialize the message passed as an argument. Cannot recognize the serialization format."

    J'ai cherché des explications sur cette erreur sur le net mais tout est en anglais et c'est super mal expliqué
    http://groups.google.fr/group/micros...a7622c17a09c69

    Ils parlent d'utiliser "ActiveXFormatter"

    Merci pour ton aide
    A+

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo