Avatar billede c-sharp Nybegynder
02. august 2007 - 12:13 Der er 20 kommentarer og
1 løsning

Hvordan modtager man en "klasse" fra en webservice

Jeg er ved at lave en webservice der skal retunere et objekt, men jeg kan ikke helt finde ud af hvordan jeg skal modtage objektet i det koder kalder webservice'en?
Avatar billede kalp Novice
02. august 2007 - 12:40 #1
hvis vi siger den returnerer et dataset.. så er det jo som enhver anden klasse.

DateSet result = webservice.MyMethod();
Avatar billede c-sharp Nybegynder
02. august 2007 - 12:55 #2
Hej kalp, tak for din kommentar.

Jeg er med på det med Dataset, men jeg vil gerne modtage et objekt af en type som jeg selv har lavet (eks. en person klasse)
Avatar billede kalp Novice
02. august 2007 - 13:03 #3
Du skal vidst oprette en reference til objektet.

men du kan se det her.
http://www.codeproject.com/useritems/GetObjectFromWebservice.asp
Avatar billede c-sharp Nybegynder
02. august 2007 - 13:48 #4
hmmm kan godt være at det bliver noget rod...

mit problem er at jeg skal retunere en NameValueCollection men det kan man ikke, så har jeg prøvet at "hælde" data over i et 2-dim array det vil den heller ikke være med til. Hvordan kan jeg på den nemmeste måde retunere de data fra min NameValueCollection?
Avatar billede kalp Novice
02. august 2007 - 13:58 #5
well.. jeg ville smide det i et XML document.

og lave 2 metoder.. en til at smide det i XML dokumentet.. og et til at gendanne det fra xml dokumentet til et objekt..

så kan du lade din webservice returnere en string (xml'en)
og på modtager siden smider du det ind i xmldocument objekt og sender til den metode som skal lægge det i et objekt.
Avatar billede arne_v Ekspert
02. august 2007 - 16:11 #6
Du laver en klasse med private fields og public properties.

Du laver en web method som returnerer et objek af den type.

På client side genererer du en stub (web service reference i VS terminologi).

Den stub indeholder en klasser som ligner den server side.

Din client kode kalder stub, får returneret et objekt af den genererede klasse
og bruger det.

Objekt orienteret og transparent.
Avatar billede c-sharp Nybegynder
03. august 2007 - 11:20 #7
Hej Arne!
Har du et link til et godt eksempel på det du skriver?
Avatar billede arne_v Ekspert
03. august 2007 - 15:56 #8
using System;
using System.Web.Services;

namespace test
{
    public class Foobar
    {
        private int iv;
        private string sv;
        public int Iv
        {
            get
            {
                return iv;
            }
            set
            {
                iv = value;
            }
        }
        public string Sv
        {
            get
            {
                return sv;
            }
            set
            {
                sv = value;
            }
        }
    }
    public class Test : WebService
    {
        [WebMethod]
        public Foobar TestIt()
        {
            Foobar res = new Foobar();
            res.Iv = 123;
            res.Sv = "ABC";
            return res;
        }
    }
}
Avatar billede arne_v Ekspert
03. august 2007 - 15:56 #9
using System;

class TestClass
{
    public static void Main(string[] args)
    {
        Test serv = new Test();
        Foobar tst = serv.TestIt();
        Console.WriteLine(tst.Iv + " " + tst.Sv);
    }
}
Avatar billede c-sharp Nybegynder
06. august 2007 - 11:31 #10
Hej Arne, tusind tak for dit eksempel!!

Jeg har et lille problem for på min klient får jeg at vide at Foobar ikke kan findes. Skal jeg på nogen måde lave en reference til den, eller hvordan komme den til at kende til den?
Avatar billede arne_v Ekspert
06. august 2007 - 15:42 #11
Hvis du bruger command line:

- kør WSDL utility
- compile den generede stub fil sammen med dit client program (den indeholder en Foobar)

Hvis du bruger VS:

- bare add web reference så skulle alt ske automatisk
Avatar billede arne_v Ekspert
06. august 2007 - 15:42 #12
Husk at client får sin egen Foobar klasse.
Avatar billede c-sharp Nybegynder
07. august 2007 - 08:24 #13
Min client har ikke lavet en foobar klasse.

Hvis jeg nu propper dit eksempel ind i min webservice så før jeg følgende fejl:

"A namespace declaration cannot have modifiers or attributes"
Avatar billede arne_v Ekspert
07. august 2007 - 19:05 #14
Hvis du kigger i den generede .cs fil - er der så ikke en Foobar klasse ?
Avatar billede arne_v Ekspert
07. august 2007 - 19:05 #15
Og hvilken linie giver syntax fejlen ?

(hm - ikke specielt pænt af mig at have et namespace "test" og en klasse "Test" ...)
Avatar billede c-sharp Nybegynder
08. august 2007 - 08:16 #16
Det er i forbindelse med namespacet, hvis jeg bare klasker din kode ind får jeg fejlen "Could not create type '[navnet på webservice]'."

Undlader jeg namespacet kan klienten ikke finde foobar.
Avatar billede arne_v Ekspert
09. august 2007 - 03:10 #17
Prøv lige at vis hvordan du "klasker" koden ind altså hvordan koden ser ud når du har fejlen.
Avatar billede c-sharp Nybegynder
09. august 2007 - 08:11 #18
Jeg smider følgende kode in i kode sektionen på min webservice som hedder testservice.asmx

using System;
using System.Web.Services;

namespace test
{
    public class Foobar
    {
        private int iv;
        private string sv;
        public int Iv
        {
            get
            {
                return iv;
            }
            set
            {
                iv = value;
            }
        }
        public string Sv
        {
            get
            {
                return sv;
            }
            set
            {
                sv = value;
            }
        }
    }
    public class testservice : WebService
    {
        [WebMethod]
        public Foobar TestIt()
        {
            Foobar res = new Foobar();
            res.Iv = 123;
            res.Sv = "ABC";
            return res;
        }
    }
}
Avatar billede arne_v Ekspert
13. august 2007 - 03:10 #19
Har du:

<%@ WebService Language="C#" Class="test.testservice" %>

i toppen af din .asmx ?
Avatar billede c-sharp Nybegynder
13. august 2007 - 08:10 #20
Jeg havde ikke fået namespavet med i class name!

Arne Tusind tak for hjælpen, smid et svar så er der point!
Avatar billede arne_v Ekspert
13. august 2007 - 15:37 #21
svar
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