Announcement

Collapse
No announcement yet.

Collections in Web Services

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Collections in Web Services

    Hallo!
    Auf dem Bereich Web Services bin ich ganz neu.
    Ich versuche gerade, ein WebService zu implementieren, das etwas mit Listen macht. Unten ist ein vereinfachtes Beispiel.

    Code:
    public class Service1 : System.Web.Services.WebService
    {
        List<string> m_lstKeys = new List<string>();
    
        [WebMethod]
        public void AddToList(string strKey)
        {
    	m_lstKeys.Add(strKey);
        }
    
        [WebMethod]
        public bool Find(string strKey)
        {
            if (m_lstKeys.Contains(strKey))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
        }
    }
    Clientseitig mache ich dann so etwas wie
    Code:
    static void Main(string[] args)
    {
        Service1 webService = new Service1();
        webService.AddToList("Name");
        string strResult = webService.Find("Name");
    }
    Wenn ich im Service-Code einen Breakpoint setze, so sehe ich wie im Rumpf der Funktion AddToList() die Liste den neuen Eintrag "Name" bekommt.
    Bei de Aufruf von Find() (ein Breakpoint auch drin) muss ich sehen, dass die Liste märchenhaft schon wieder leer ist. Deswegen liefert Find() immer false.

    Ich vermute, dass es sich hier um eine Einstellung handelt, finde aber nicht, woran das liegt.
    Wenn jemand mir einen Tipp geben kann! Danke im voraus.

    Alex

  • #2
    Ein Webservices ist erstmal statuslos gedacht. Jeder Aufruf ist ein eigener Context völlig unabhängig von jedem vorhergehenden bzw. jeder Aufruf seine eigene Service1 Instanz. Wenn du über Aufrufe hinweg Information speichern willst bist du im SessionHandling-geschäft unterwegs. Soll die Liste für alle User des Webservices die gleiche sein oder soll jeder User seine eigene haben oder brauch eine User mehrere davon(mehrere Sessions je User)?

    Comment


    • #3
      Hallo Ralf,
      danke, das leuchtet halbwegs ein. Aber nur halbwegs: ich habe einen Service instanzieert:

      Service1 webService = new Service1();

      Der Web Service ist so gedacht, dass er Daten sammelt und alle Clients mit den gleichen daten bedient. Muss ich denn die Daten nach jeder Veränderung am Server irgendwie serialisieren (Datenbank usw.) damit sie nicht verschwinden?

      Gruss, Alex

      Comment


      • #4
        Du brauchst auf jedenfall irgendwas das die Service Instanz überlebt. Im simpelsten Fall kannst du die Liste einfach statisch definieren (die Zugriffe auf die Liste dann halt nur synchronisieren). Oder eben eine sessionbasierten Webservice aufsetzen. Wenn du aber in die Details von Webservices eintauchen willst ist der klassische Ansatz mit den Webservices aus der ASP.Net Ecke nicht zu empfehlen. Sieh dich lieber in der WCF Ecke um. Das ist die aktuelle Technik zu der du auch mehr Informationen zum was, wann, wie finden solltest.


        Service1 webService = new Service1();
        Das verwirrt mich jetzt. Ein Webservice wird in irgendeinem Serviceprozess gehostet. Da wirst du niemals nicht ein new Service selbst programmieren. Das übernimmt der Host der je Call eine Service Instanz abspaltet. Das macht man aber nicht selber.
        Oder ist hier irgendein clientseitiger Proxy gemeint der ~zufällig~ genauso wie die Service Klasse auf dem Server heißt?

        Comment

        Working...
        X