Avatar billede rmjdk Nybegynder
17. maj 2007 - 21:33 Der er 10 kommentarer og
1 løsning

NullReference på MessageQueue.Receive() object

Jeg har en tråd der lytter efter brugere på en queue, når Receive() metoden er kørt returnerer den en Message. Problemet er så, at jeg, via en if() sætning, kontrollerer om Message er null, efter den har passeret if() sætningen får jeg en null.

Hvordan løser jeg dette? Jeg kan intet finde på google.

Kode:

        public void Listen()
        {
            while (true)
            {
                Message newUser = userSubscription.Receive();

                if (newUser != null)
                {

                    newUser.Formatter = XMLHelper.GetFormatter();
                    MessageBox.Show(((XmlDocument) newUser.Body).GetElementById("Name").InnerText);

                    try
                    {
                        mainForm.Invoke(mainForm.newUserDelegate, new object[] {newUser});
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("UserSubscriptionListener: Invoke: " + ex.Message);
                    } 
                }
            }
        }


eller på følgende link: http://rafb.net/p/mVfpJv92.html
Avatar billede kalp Novice
17. maj 2007 - 21:40 #1
message er ikke null... den bliver jo hentet..

du skal tjekke om Message.Body er = null eller ""
Avatar billede kalp Novice
17. maj 2007 - 21:49 #2
public void Listen()
        {
            while (true)
            {
                Message newUser = userSubscription.Receive();

                if (newUser.Body != null && newUser.Body.Trim() != "")
                {

                    newUser.Formatter = XMLHelper.GetFormatter();
                    MessageBox.Show(((XmlDocument) newUser.Body).GetElementById("Name").InnerText);

                    try
                    {
                        mainForm.Invoke(mainForm.newUserDelegate, new object[] {newUser});
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("UserSubscriptionListener: Invoke: " + ex.Message);
                    } 
                }
            }
        }
Avatar billede rmjdk Nybegynder
17. maj 2007 - 21:59 #3
Hey kalp!

Jeg har prøvet at tjekke på .Body, men med samme resultat...

Andre forslag ?

på forhånd tak!
Avatar billede rmjdk Nybegynder
17. maj 2007 - 22:00 #4
Jeg har ydermere være inde i Windows MSMQ og se Body på Messagen og kan se den stemmer overens med det XML dokument jeg sender igennem.
Avatar billede kalp Novice
17. maj 2007 - 22:03 #5
det letteste er at debugge det.. sæt et breakpoint ved første linje og start..

tryk F10 for at steppe igennem når den stopper og så vil den til sidst havne ved en linje hvor den ikke kommer videre fordi der er en fejl her.. du kan så i debug vindue føre musen hen over de forskellige elementer og læse deres indhold..

og dermed se hvad det er som er null
Avatar billede kalp Novice
17. maj 2007 - 22:05 #6
jeg fornemmer desuden det er Name som er null... i innertext..

    public void Listen()
        {
            while (true)
            {
                Message newUser = userSubscription.Receive();

                if (newUser != null)
                {

                    newUser.Formatter = XMLHelper.GetFormatter();
if(((XmlDocument) newUser.Body).GetElementById("Name").InnerText != null)
                    MessageBox.Show(((XmlDocument) newUser.Body).GetElementById("Name").InnerText);

                    try
                    {
                        mainForm.Invoke(mainForm.newUserDelegate, new object[] {newUser});
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("UserSubscriptionListener: Invoke: " + ex.Message);
                    } 
                }
            }
        }
Avatar billede rmjdk Nybegynder
17. maj 2007 - 22:20 #7
Jeg har prøvet, at debugge og kan se at det er ting som AdministrationQueue, ResponeQueue og SecurityContext som er null. Jeg kan fint se, at Body indeholder mit XML dokument... Hvad dælen er i vejen ?
Avatar billede rmjdk Nybegynder
17. maj 2007 - 22:21 #8
En anden ting, den MessageBox har jeg KUN på for at se om jeg kunne extracte indholdet, hvis den ikke er der, får jeg bare en NullReference ved mainForm.Invoke(...);
Avatar billede kalp Novice
17. maj 2007 - 22:33 #9
hvad er mainForm?
hvis den fejler der er det jo ikke message som er null
Avatar billede rmjdk Nybegynder
17. maj 2007 - 22:41 #10
i mainFormen er mit delegat som invokes, mainForm er ikke null.

Jeg har uploadet al koden her http://peecee.dk/index.php?id=46376 håber det kan hjælpe, for jeg kan ikke gennemskue hvor fejlen ligger.

endnu engang... på forhånd tak !
Avatar billede rmjdk Nybegynder
18. maj 2007 - 12:22 #11
Jeg har nu lokaliseret fejlen, den opstod i metodekaldet når jeg invokede delegatet. Null referencen opstod altså inde i metodekaldet og ikke ved metodekaldet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester