Avatar billede prec Nybegynder
27. maj 2004 - 17:51 Der er 10 kommentarer og
1 løsning

WebService returnering af objekter

Jeg sidder og leger lidt med at lave en webservice, jeg vil gerne have den til at returnere et helt objekt og alt hvad det indebærer, her et eksempel på hvad jeg ikke kan få til at virke:

class obj1
    {
        public string Titel;
        public obj2[] Items;

        public void obj1(string titel)
        {
            Titel = titel;

            Items = new obj2[2];
            Items[0] = new obj2("test1");
            Items[1] = new obj2("test2");
        }
    }

    class obj2
    {
        public string Titel;
       
        public void obj2(string titel)
        {
            Titel = titel;
        }
    }

Som i nok kan se indeholder obj1 en obj2 array som indeholder 2 instances af obj2.

[WebMethod]
        public obj1 test()
        {
            obj1 obj = new obj1("test0");
            return obj;
        }

Denne webmethod skulle gerne returnere på titlen på obj1 og de 2 obj2 instances, eller skulle den?
Jeg er ikke sikker på om jeg har misforstået WebServices virkemåde eller ej, men jeg vil ihvertfald gerne have den til at returnere hele skidtet.
Avatar billede prec Nybegynder
27. maj 2004 - 17:53 #1
Jeg glemte lige at sige at da jeg lavede testen fik jeg kun titlen på obj1 dvs "test0" og ikke andet.
Avatar billede nielsbrinch Nybegynder
27. maj 2004 - 21:09 #2
Det er fuldstændig rigtigt
Avatar billede nielsbrinch Nybegynder
27. maj 2004 - 21:10 #3
Ovenstående giver følgende resultat i XML

<obj1>
  <Titel>test0</Titel>
  <obj2>
    <Titel>test1</Titel>
  </obj2>
  <obj2>
    <Titel>test2</Titel>
  </obj2>
</obj1>
Avatar billede prec Nybegynder
27. maj 2004 - 23:56 #4
Kan jeg lokke dig til at skrive den præcise source kode du har brugt til at få det til at virke, for det virker ikke hos mig
Avatar billede prec Nybegynder
28. maj 2004 - 00:04 #5
okay jeg burde måske have testet det der, det var egentlig kun et eksempel, det lader dog til at virke...

Det andet kode hvor jeg har problemet er lidt langt, så jeg ved ik om jeg bør skrive det her, jeg kan da lige prøve, så må folk læse det hvis de gider :)

dAccess.asmx
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace WebServices
{
    /// <summary>
    /// Summary description for dAccess.
    /// </summary>
    [WebService(Namespace="http://www.mouse-one.dk/webservices/")]
    public class dAccess : System.Web.Services.WebService
    {
        public dAccess()
        {
            //CODEGEN: This call is required by the ASP.NET Web Services Designer
            InitializeComponent();
        }

        [WebMethod()]
        public VareKategori[] GetCat()
        {
            VareKategori[] cat = new VareKategori[2];

            cat[0] = new VareKategori(1, "Grafikkort");
            cat[0].AddProducent(new VareProducent(1, "ASUS"));
            cat[0].AddProducent(new VareProducent(2, "MSI"));
            cat[1] = new VareKategori(2, "Bundkort");
            cat[1].AddProducent(new VareProducent(2, "MSI"));
            cat[1].AddProducent(new VareProducent(3, "BLA"));

            foreach(VareKategori c in cat)
            {
                Debug.WriteLine("Kategori: " + c.ID + " - " + c.Titel);
                foreach(VareProducent p in c.Producenter)
                {
                    Debug.WriteLine("Producent: " + p.ID + " - " + p.Titel);
                }
            }
            return cat;
        }

        #region Component Designer generated code
       
        //Required by the Web Services Designer
        private IContainer components = null;
               
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if(disposing && components != null)
            {
                components.Dispose();
            }
            base.Dispose(disposing);       
        }
       
        #endregion
    }
}

VareKategori.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace WebServices
{
    /// <summary>
    /// Summary description for dAccess.
    /// </summary>
    [WebService(Namespace="http://www.mouse-one.dk/webservices/")]
    public class dAccess : System.Web.Services.WebService
    {
        public dAccess()
        {
            //CODEGEN: This call is required by the ASP.NET Web Services Designer
            InitializeComponent();
        }

        [WebMethod()]
        public VareKategori[] GetCat()
        {
            VareKategori[] cat = new VareKategori[2];

            cat[0] = new VareKategori(1, "Grafikkort");
            cat[0].AddProducent(new VareProducent(1, "ASUS"));
            cat[0].AddProducent(new VareProducent(2, "MSI"));
            cat[1] = new VareKategori(2, "Bundkort");
            cat[1].AddProducent(new VareProducent(2, "MSI"));
            cat[1].AddProducent(new VareProducent(3, "BLA"));

            foreach(VareKategori c in cat)
            {
                Debug.WriteLine("Kategori: " + c.ID + " - " + c.Titel);
                foreach(VareProducent p in c.Producenter)
                {
                    Debug.WriteLine("Producent: " + p.ID + " - " + p.Titel);
                }
            }
            return cat;
        }

        #region Component Designer generated code
       
        //Required by the Web Services Designer
        private IContainer components = null;
               
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if(disposing && components != null)
            {
                components.Dispose();
            }
            base.Dispose(disposing);       
        }
       
        #endregion
    }
}

VareProducent.cs
using System;
using System.Diagnostics;

namespace WebServices
{
    /// <summary>
    /// En vare producent.
    /// </summary>
    public class VareProducent
    {
        private int pID;
        private string pTitel;

        #region Properties
        public int ID
        {
            get
            {
                return pID;
            }
            set
            {
                pID = value;
            }
        }

        public string Titel
        {
            get
            {
                return pTitel;
            }
            set
            {
                pTitel = value;
            }
        }
        #endregion

        #region Constructors
        /// <summary>
        /// Opret producent.
        /// </summary>
        public VareProducent()
        {
            Debug.WriteLine("New VareProducent()");
        }

        /// <summary>
        /// Opret producent og tildel ID, samt Titel.
        /// </summary>
        /// <param name="id">Producentens ID.</param>
        /// <param name="titel">Producentens Titel.</param>
        public VareProducent(int id, string titel)
        {
            pID = id;
            pTitel = titel;
            Debug.WriteLine("New VareProducent(" + id + ", " + titel + ")");
        }
        #endregion
    }
}

Værsgo og find fejlen eller test det eller whatever you want, den returner ihvertfald ikke hvad den burde.
Avatar billede prec Nybegynder
28. maj 2004 - 00:05 #6
argh selvfølgelig laver jeg fejl, her kommer VareKategori.cs igen:
using System;
using System.Diagnostics;

namespace WebServices
{
    /// <summary>
    /// En vare kategori.
    /// </summary>
    public class VareKategori
    {
        private int kID;
        private string kTitel;
        private VareProducent[] kProducenter = new VareProducent[0];

        #region Properties
        public int ID
        {
            get
            {
                return kID;
            }
            set
            {
                kID = value;
            }
        }

        public string Titel
        {
            get
            {
                return kTitel;
            }
            set
            {
                kTitel = value;
            }
        }

        public VareProducent[] Producenter
        {
            get
            {
                return kProducenter;
            }
        }
        #endregion

        #region Constructors
        /// <summary>
        /// Opret kategori.
        /// </summary>
        public VareKategori()
        {
            Debug.WriteLine("New VareKategori()");
        }

        /// <summary>
        /// Opret kategori og tildel ID, samt Titel.
        /// </summary>
        /// <param name="id">Kategoriens ID.</param>
        /// <param name="titel">Kategoriens navn/titel.</param>
        public VareKategori(int id, string titel)
        {
            kID = id;
            kTitel = titel;
            Debug.WriteLine("New VareKategori(" + id + ", " + titel + ")");
        }
        #endregion

        /// <summary>
        /// Tilføj en tildelt Producent til Kategorien.
        /// </summary>
        /// <param name="producent">Producenten der skal tilføjes.</param>
        public void AddProducent(VareProducent producent)
        {
            int NewLength = kProducenter.Length + 1;
            int NewIndex = kProducenter.Length;
            VareProducent[] NewArray = new VareProducent[NewLength];
            kProducenter.CopyTo(NewArray, 0);
            NewArray[NewIndex] = producent;
            kProducenter = NewArray;
        }

        /// <summary>
        /// Tilføj en ny Producent til Kategorien, med tildelt ID og Titel.
        /// </summary>
        /// <param name="id">ID på Producenten der skal oprettes.</param>
        /// <param name="titel">Titel/navn på Producenten der skal oprettes.</param>
        public void AddProducent(int id, string titel)
        {
            int NewLength = kProducenter.Length + 1;
            int NewIndex = kProducenter.Length;
            VareProducent[] NewArray = new VareProducent[NewLength];
            kProducenter.CopyTo(NewArray, 0);
            NewArray[NewIndex] = new VareProducent(id, titel);
            kProducenter = NewArray;
        }
    }
}

og undskyld for de mange posts :)
Avatar billede nielsbrinch Nybegynder
28. maj 2004 - 16:01 #7
Det gider jeg ikke læse.

Du må fortælle præcis hvad du ikke kan få til at virke.
Avatar billede prec Nybegynder
28. maj 2004 - 17:14 #8
det kan jeg ikke forklare på andre måder end at give dig source koden, opbygningen er præcis den samme som det eksempel jeg skrev, det er bare mere udvidet, du kan evt prøve koden, der kan du se at objektet indeholder det det skal, men ikke returner det ordenligt.
Avatar billede nielsbrinch Nybegynder
28. maj 2004 - 17:36 #9
Jeg vil gerne hjælpe dig med at løse problemet. Først skal jeg vide hvad problemet er. "Det virker ikke" er en præcis nok fejlbeskrivelse.
Avatar billede nielsbrinch Nybegynder
28. maj 2004 - 17:37 #10
...er IKKE en præcis nok fejlbeskrivelse, skulle der selvfølgelig stå.
Avatar billede prec Nybegynder
06. august 2004 - 12:11 #11
a
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