Avatar billede digitalsoul Nybegynder
10. oktober 2005 - 10:50 Der er 8 kommentarer og
1 løsning

Structs som parametre til en webservice

Problemet ligger i at jeg gerne vil sende en struct / class med som parameter til en webmethod. Når jeg prøver det så får jeg fejlen:

Error    5    Argument '1': cannot convert from 'ClientData' to 'localhost.ClientData'    c:\inetpub\wwwroot\StructTest\Default.aspx.cs    26    18    http://localhost/StructTest/

koden på en aspx side til at test med:
        localhost.WebService ws = new localhost.WebService();
        ClientData cd = new ClientData();
        cd.ID = 5;
        cd.Name = "hans";
        ws.Test( cd );

Structen:
public struct ClientData
{
    public String Name;
    public int ID;
}

Har ingen problemer med at retunere structs..
Avatar billede arne_v Ekspert
10. oktober 2005 - 10:52 #1
lyder aom om du har 2 structs:
  ClientData
  localhost.ClientData
altså i forskellige namespaces
Avatar billede digitalsoul Nybegynder
10. oktober 2005 - 10:59 #2
Structen:

using System;
using System.Data;
using System.Collections;
using System.Web.Services;

namespace Structs
{
    public struct ClientData
    {
        public String Name;
        public int ID;
    }
}
Avatar billede digitalsoul Nybegynder
10. oktober 2005 - 10:59 #3
Webservicen:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using Structs;

[WebService(Namespace = "http://tempuri.org/")]
public class WebService : System.Web.Services.WebService {

    public WebService () {

    }

    [WebMethod]
    public ClientData[] GetClientData(int Number)
    {
        ClientData[] Clients = null;

        if (Number > 0 && Number <= 10)
        {
            Clients = new ClientData[Number];
            for (int i = 0; i < Number; i++)
            {
                Clients[i].Name = "Client " + i.ToString();
                Clients[i].ID = i;
            }
        }
        return Clients;
    }

    [WebMethod]
    public string Test(ClientData client)
    {
        return client.ID + " - " + client.Name;
    }
   
}
Avatar billede digitalsoul Nybegynder
10. oktober 2005 - 10:59 #4
aspx test siden:
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Structs;


public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        localhost.WebService ws = new localhost.WebService();
        ClientData cd = new ClientData();
        cd.ID = 5;
        cd.Name = "hans";
        ws.Test( cd );
    }
}
Avatar billede digitalsoul Nybegynder
10. oktober 2005 - 11:00 #5
både klienten og webservicen er sat til at bruge struct namespacet, så kan ikke lige se hvordan den skulle tolke det som 2 forskellige namespaces?
Avatar billede arne_v Ekspert
10. oktober 2005 - 11:01 #6
fordi der en en genereret stub på client siden !

prøv:

        localhost.WebService ws = new localhost.WebService();
        localhost.ClientData cd = new localhost.ClientData();
        cd.ID = 5;
        cd.Name = "hans";
        ws.Test( cd );
Avatar billede digitalsoul Nybegynder
10. oktober 2005 - 11:30 #7
Ah mange tak, det løste problemet :)

Det med en genereret stub på klient siden, kan du uddybe det lidt?

Og smid lige et svar :)
Avatar billede digitalsoul Nybegynder
10. oktober 2005 - 11:32 #8
Og det samme ville vel være gældende hvis jeg nu bruger alm objekter?
Avatar billede arne_v Ekspert
10. oktober 2005 - 11:35 #9
når du laver en web service reference så kører du i virkeligheden et program som
genererer nogle klasser udfra WSDL URL (du kan faktisk selv køre det program
manuelt)

de klasser smide i et namespace udfra URL - i dit tilfælde localhost

derfor localhost.WebService men også alle de klasser som indgår i argumenter
og retur værdier genereres (medmindre de er kendte) og derfor  localhost.ClientData

----

og 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