locked
WCF Service - fields / globale Klassenvariablen benutzen RRS feed

  • Frage

  • Hallo ich habe folgendes Problem:

    Serverseitig habe ich einen Wcf Service (soap).

    Clientseitig greife ich über meine Silverlight Anwendung, die im Sharepoint gehostet wird, auf den WCF Service zu.

    Meine WCF Service Klasse hat einige Felder/fields, die ich in der Methode 1 verändern möchte und in der Methode 2 auslesen möchte.

    z.B.

    private string test = "empty";

    [OperationContract]
    public void Method1()
    {
       test = "not empty";
    }

    [OperationContract]
    public void Method2()
    {
       return test;
    }

    Das problem ist, wenn ich Method2 aufrufe, bekomme ich als Wert "empty" raus.

    Was kann ich da machen?

    static geht nicht, da meine Felder auch Objekte sein können.

    Donnerstag, 31. Mai 2012 11:27

Alle Antworten

  • Hallo,

    Im Standard wird der Service per Call instanziiert, deswegen ist das vorherige Ergebnis immer wieder weg.

    Das kannst Du aber über die ServiceBehavior => InstanceContextMode beeinflussen, ob es per Call, Session oder Single instanziiert werden soll.

    Grundsätzlich sollte ein Service aber immer Statuslos arbeiten; wenn nun zwei User auf den Service zugreifen, soll da der zweite das Ergebnis des ersten erhalten?


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Donnerstag, 31. Mai 2012 11:51
  • Grundsätzlich sollte ein Service aber immer Statuslos arbeiten; wenn nun zwei User auf den Service zugreifen, soll da der zweite das Ergebnis des ersten erhalten?

    Danke erst mal für die schnelle Antwort.


    Nein, das soll eine 1:1 Beziehung bleiben. Andere User sollen nur die eigenen Ergebnisse sehen können. Ich habe gelesen, dass WCF per Session, nicht performant ist, wenn viele Benutzer darauf zugreifen.

    Es muss nicht Session basierend sein, ich weiß nur nicht wie ich folgendes anders realisieren soll.

    User 1 benutzt eine Sl Anwendung und für eine Methode auf dem Webservice aus. Wenn es was "Neues" auf der Serverseite passiert ist, soll der Webservice z.B. per callback den User 1 informieren. User 2 soll aber nicht informiert werden, da das Ereignis nur den User 1 betrifft.





    • Bearbeitet atomic2000 Donnerstag, 31. Mai 2012 13:57
    Donnerstag, 31. Mai 2012 12:03